如何在 parallel.foreach 循环范围之外递增整数值?在并行循环之外同步访问对象的最简单方法是什么?
var count = 0;
Parallel.ForEach(collection, item =>
{
action(item);
// increment count??
}
最佳答案
我喜欢打死马! :)
从多个线程递增计数的“最简单”方法是:
Interlocked.Increment(ref count);
但正如其他人指出的那样:如果您在 Parallel.ForEach
中执行此操作,那么您可能做错了什么。
我怀疑出于某种原因你正在使用 ForEach
但你需要一个你正在处理的项目的索引(它永远不会与 Parallel.ForEach
).我很接近吗?为什么需要计数?你想施展什么样的 VooDoo 魔法?
更新:
如果您的键是 URI
并且值是 TAnswer
,那么您使用 ConcurrentDictionary
似乎是安全的。只要您不尝试使用计数来引用集合中的元素,我就看不出问题。
最后...
如果您需要一个计数器,请使用 Parallel.For
循环...它会为您安全地递增计数器。
关于c# - 在 parallel.foreach 范围之外递增计数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2394447/