我遇到了.NET 4的 ThreadLocal<T>
并想知道是否有一种方法可以积累到。.Value
的值。
在微软的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开始,微软增加了一个叫做 Values
至 ThreadLocal
类,它可以完全满足你的需求。下面是它的工作方式。
var localResult = new ThreadLocal<int>(() => 0, trackAllValues: true);
Parallel.For(0, 10000, i =>
{
localResult.Value += Compute(i);
});
int result = localResult.Values.Sum();
上面的代码是从博文中获得的。.NET 4.5中的新功能:ThreadLocal.Values。