c# – 如何组合ThreadLocal变量的值?

我遇到过.NET4的ThreadLocal< T>并且想知道是否有办法累积所有线程的.Value值.

在Microsoft的ppl C库中,它们有Concurrency::combinable::combine_each,.NET的ThreadLocal是否有相同的方法

ThreadLocal<long> ticks = new ThreadLocal<long>();

void AddTicks(StopWatch sw)
{
    ticks.Value += sw.ElapsedTicks;
}

void ReportTimes()
{
    long totalTicks = /* How do I accumulate all the different values?  */;
    Console.WriteLine(TimeSpan.FromTicks(totalTicks));
}

解决方法

从.Net 4.5开始,microsoft在ThreadLocal类中添加了一个名为Values的属性,可以完全满足您的需求.请在下面找到它的工作方式:
var localResult = new ThreadLocal<int>(() => 0,trackAllValues: true);
Parallel.For(0,10000,i =>
{
    localResult.Value += Compute(i);
});

int result = localResult.Values.Sum();

上面的代码是从博客文章http://blogs.msdn.com/b/pfxteam/archive/2011/11/11/10236000.aspx获得的

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...