Parallel.For当前遇到问题。 我正在尝试运行大约1000个长期运行的任务(每个任务运行120秒),而我的问题似乎是,在最后10-20次迭代中,处理变为单线程。>
伪代码:
Parallel.For(0, 1000,
(i, loopState)=>
{
//Do lots of work
Thread.Sleep(120_000);
});
你们知道为什么会这样吗,如何解决这个问题?
答案 0 :(得分:0)
我想我已经解决了这个问题,或者至少找到了一个解决方案,使它消失了。
可悲的是,我所提问的示例代码并非100%代表我的代码,在我的代码中,我对localInit
和localFinally
使用了重载。我以为没关系,但似乎有关系。
我的猜测是,这样做时,内部实现对我的循环迭代进行了分区,并将每个分区静态分配给了一个单独的线程。由于每个元素花费的处理时间截然不同,因此导致一个分区比其他分区花费更多的时间,因此是单线程的。
解决方法是使用我的问题中引用的重载,该重载似乎并没有遭受此问题的困扰。