1

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

4

0 回答 0