当前位置:编程学习 > C#/ASP.NET >>

为什么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()); --------------------编程问答--------------------
引用 1 楼 Chinajiyong 的回复:
你放到循环里,当然哦

外面的循环没差吧?怎么会影响到里面?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,