Parallel.Foreach - 最后一项等待其他项目

时间:2013-06-26 12:08:17

标签: c# parallel-processing

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

0 个答案:

没有答案