Parallel.For 接近尾声时变为单线程

Parallel.For becomes single threaded near the end

我目前在使用 Parallel.For 时遇到了问题。 我正在尝试 运行 一批 ~1000 个相当长的 运行ning 任务(每个 运行ning 大约 120 秒),我的问题似乎是,在最后10-20次迭代,处理变成单线程。

伪代码:

Parallel.For(0, 1000,
           (i, loopState)=> 
           {
            //Do lots of work
            Thread.Sleep(120_000);
           });

你们知道为什么会这样吗?如何解决这个问题?

我想我已经解决了问题,或者至少找到了解决问题的方法。

遗憾的是,我问题中的示例代码并不能 100% 代表我的代码,在我的代码中,我使用了 localInitlocalFinally 的重载。我以为这无关紧要,但似乎确实如此。

我的猜测是,在这样做的过程中,内部实现对我的循环迭代进行了分区,并将每个分区静态分配给一个单独的线程。由于每个元素的处理时间都大不相同,因此导致一个分区比其他分区花费的时间长得多,因此是单线程。

修复是使用我的问题中引用的重载,它似乎没有遇到这个问题。