我写了一个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% 的时间。它(正常工作)发生某种随机。因为它有时会起作用,所以感觉有点错误,但对于我正在构建的应用程序的性能来说并不是一个大问题。你明白上面是一个测试用例,而不是实际项目的一部分:)