c# - 如何合并 ThreadLocal<T> 中的所有值?

标签 c# .net multithreading .net-4.0

我遇到过 .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/

相关文章:

c# - MVC3 项目从另一个属性设置 StringLength 验证值

c# - 对 Windows 服务具有 WRITE 权限而对其他应用程序只有 READ 权限的文件夹

android - 取消 ProgressDialog 并停止线程

ios - UITableView reloadData异步

javascript - 如何通过JQuery/Javascript优化列表框绑定(bind)C#代码?

c# - 为什么我不能在 Razor WebGrid 的委托(delegate)中使用我的扩展方法

c# - 为什么这个 'Label' 是一个字段?

.Net聊天室系统

c# - Visual Studio Code launchurl 不适用于 Web API

spring - Spring @Async @Autowired仅在一种方法中为null