Parallel.For在末尾附近成为单线程

问题描述 投票:-1回答:1

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

伪代码:

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

你们知道为什么会这样,这个问题怎么解决?

c# .net task-parallel-library
1个回答
0
投票

我想我已经找到了问题,或者至少找到了一个让它消失的解决方案。

遗憾的是,我的问题中的示例代码并非100%代表我的代码,在我的代码中,我使用了localInitlocalFinally的重载。我认为这没关系,但似乎确实如此。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.