Parallel.For在末端附近变为单线程

时间:2019-04-20 13:57:40

标签: c# .net task-parallel-library

Parallel.For当前遇到问题。 我正在尝试运行大约1000个长期运行的任务(每个任务运行120秒),而我的问题似乎是,在最后10-20次迭代中,处理变为单线程。

伪代码:

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

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

1 个答案:

答案 0 :(得分:0)

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

可悲的是,我所提问的示例代码并非100%代表我的代码,在我的代码中,我对localInitlocalFinally使用了重载。我以为没关系,但似乎有关系。

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

解决方法是使用我的问题中引用的重载,该重载似乎并没有遭受此问题的困扰。