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

前端之家收集整理的这篇文章主要介绍了c# – 如何组合ThreadLocal变量的值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到过.NET4的ThreadLocal< T>并且想知道是否有办法累积所有线程的.Value值.

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

  1. ThreadLocal<long> ticks = new ThreadLocal<long>();
  2.  
  3. void AddTicks(StopWatch sw)
  4. {
  5. ticks.Value += sw.ElapsedTicks;
  6. }
  7.  
  8. void ReportTimes()
  9. {
  10. long totalTicks = /* How do I accumulate all the different values? */;
  11. Console.WriteLine(TimeSpan.FromTicks(totalTicks));
  12. }

解决方法

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

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

猜你在找的C#相关文章