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());