加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:33:29 所属栏目:百科 来源:网络整理
导读:我遇到过.NET4的ThreadLocal T并且想知道是否有办法累积所有线程的.Value值. 在Microsoft的ppl C库中,它们有 Concurrency::combinable::combine_each ,.NET的ThreadLocal是否有相同的方法? ThreadLocallong ticks = new ThreadLocallong();void AddTicks(St
我遇到过.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获得的

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读