【发布时间】:2010-07-29 21:58:33
【问题描述】:
我有一个正在并行化的foreach 循环,我注意到一些奇怪的东西。代码看起来像
double sum = 0.0;
Parallel.ForEach(myCollection, arg =>
{
sum += ComplicatedFunction(arg);
});
// Use sum variable below
当我使用常规的 foreach 循环时,我会得到不同的结果。 ComplicatedFunction 内部可能有更深层次的东西,但 sum 变量可能会意外地受到并行化的影响?
【问题讨论】:
-
参见 [在 parallel.foreach 范围外增加一个计数值](stackoverflow.com/questions/2394447/…)。基本上,如果需要,您可以使用Interlocked,但最好尽可能避免副作用。
标签: c# parallel-processing task