为什么 PLINQ 输出不同于顺序处理和 Parallel.For 循环
我想添加 10,000,000 个数字的平方根之和。这是 3 种情况的代码:
顺序for循环:
double sum = 0.0;
for(int i = 1;i<10000001;i++)
sum += Math.Sqrt(i);
输出为:21081852648.717
现在使用 Parallel.For 循环:
object locker = new object();
double total ;
Parallel.For(1,10000001,
()=>0.0,
(i,state,local)=> local+Math.Sqrt(i),
(local)=>
{
lock(locker){ total += local; }
}
);
输出为:21081852648.7199
现在使用 PLINQ
double tot = ParallelEnumerable.Range(1, 10000000)
.Sum(i => Math.Sqrt(i));
输出为:21081852648.72
为什么 PLINQ 输出与 Parallel.For 和 Sequential for 循环之间存在差异?