我遇到了.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));
}
答案 0 :(得分:5)
此信息不可用。微软是considering adding such a feature。您需要在ThreadLocal<T>
周围编写一个包装来添加此行为。
Here is a blog post提供了有关如何编写包装器的一些说明。
答案 1 :(得分:3)
自.Net 4.5以来,microsoft在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