为什么Parallel.ForEach()方法计算1加到5结果出错,代码挺简单的
for (int i = 0; i < 100; i++)
{
int[] nums = Enumerable.Range(1, 5).ToArray();
long total = 0;
Parallel.ForEach<int, long>(nums, () => 0, (member, loopState, subtotal) =>
{
if (member == 2)
return 0;
subtotal += member;
return subtotal;
},
(x) => Interlocked.Add(ref total, x)
);
Console.WriteLine(total.ToString());
}
十分困惑,我想1-5,除了2以外,统统相加,我笔算了下,结果应该是13,为什么输出了这么多12? Parallel 并行 ForEach --------------------编程问答-------------------- 你放到循环里,当然哦 --------------------编程问答-------------------- 不要循环
long total = 0;
int[] nums = Enumerable.Range(1, 5).ToArray();
Parallel.ForEach<int, long>(nums, () => 0, (member, loopState, subtotal) =>
{
if (member == 2)
return 0;
subtotal += member;
return subtotal;
},
(x) => Interlocked.Add(ref total, x)
);
Console.WriteLine(total.ToString()); --------------------编程问答--------------------
外面的循环没差吧?怎么会影响到里面?
补充:.NET技术 , C#