我写了一个parellel.foreach,但最后一次迭代总是在所有其他项目都被处理之前等待执行,在这种情况下,只有当1-9准备就绪时,数字10才会触发,尝试了几次,为什么这样,我可以解决这个问题吗?
这是我的代码:
class Program
{
public static void Main(string[] args)
{
int Min = 100;
int Max = 200;
Random randNum = new Random();
int[] test2 = Enumerable.Repeat(0, 10).Select(i => randNum.Next(Min, Max)).ToArray();
string[] result = test2.Select(x => x.ToString()).ToArray();
int count = 0;
var options = new ParallelOptions { MaxDegreeOfParallelism = 4 };
Parallel.ForEach(result, options, rec =>
{
count++;
go(count);
});
Console.WriteLine("Ready!");
Console.ReadKey();
}
public static void go(int counter)
{
Console.WriteLine("START: " + counter.ToString());
Thread.Sleep(3500);
Console.WriteLine("END: " + counter.ToString());
}
}
修改 的 我运行程序20-30次,似乎在9结束之前开始了几次10。我认为这种情况发生在大约4%或5%的时间。这是(正常工作)发生某种随机性。因为它有时会起作用,感觉有点不对劲,但对于我正在构建的应用程序的性能来说并不是一个大问题。您了解以上是一个测试用例,而不是实际项目的一部分:)