我遇到过 .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 以来,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();
以上代码取自博文:New in .NET 4.5: ThreadLocal.Values
关于c# - 如何合并 ThreadLocal<T> 中的所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10282179/