【发布时间】:2014-04-11 14:27:39
【问题描述】:
我有一个 Parallel Foreach 循环,它遍历一个项目列表,并对它们执行一些操作。其中一些操作比其他操作花费更长的时间,具体取决于项目。
Parallel.ForEach(list, new ParallelOptions { MaxDegreeOfParallelism = 5 }, item =>
{
var subItems = item.subItems;
foreach (var subItem in subItems)
{
//do some actions for subItem
}
Console.WriteLine("Action Complete for {0}", item);
});
一段时间后,当列表中只剩下大约 5-10 项要运行时,似乎只剩下 1 个线程在运行。这并不理想,因为有些项目会卡在另一个项目后面才能完成。
如果我停止脚本,然后重新启动它,列表中只有剩余的 5-10 个项目,它会启动多个线程以再次并行执行每个项目。
如何确保其他线程将继续使用,而无需我重新启动脚本?
【问题讨论】:
标签: multithreading foreach parallel-processing