2012-04-23 30 views
6

我已經運行了.NET4的ThreadLocal<T>,並想知道是否有一種方法來積累所有線程中的.Value值。如何結合ThreadLocal <T>變量的值?

在微軟的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)); 
} 

回答

2

由於.Net 4.5,微軟將一個名爲Values的屬性添加到ThreadLocal類中,該類完全符合您的需求。請在下面找到它的工作方式:

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

+2

您可以編輯該有,你會如何使用新屬性來解決問題的例子中得到的代碼?我認爲這是很好的信息,但有點稀疏。更多的細節對於有人來到SO非常有幫助。 – 2015-10-23 01:41:21