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

解决方案 »

  1.   

    不要循环
     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());