【发布时间】:2018-09-02 14:10:20
【问题描述】:
我写了一个简单的 Parallel.For 循环。但是当我运行代码时,我得到随机结果。我预计 var total 为 15 (1+2+3+4+5)。我使用 Interlocked.Add 来防止竞争条件和奇怪的行为。有人可以解释为什么输出是随机的而不是 15 吗?
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("before Dowork");
DoWork();
Console.WriteLine("After Dowork");
Console.ReadLine();
}
public static void DoWork()
{
try
{
int total = 0;
var result = Parallel.For<int>(0, 6,
() => 0,
(i, status, y) =>
{
return i;
},
(x) =>
{
Interlocked.Add(ref total, x);
});
if (result.IsCompleted)
Console.WriteLine($"total is: {total}");
else Console.WriteLine("loop not ready yet");
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
【问题讨论】:
-
按预期显示 15
-
我的电脑上没有...
-
localFinally
Action<TLocal>对每个任务的本地状态执行最终操作的委托。
标签: c# .net parallel-processing