C# 将Parallel.ForEach()用于长时间运行的进程
我有一个如下实现:C# 将Parallel.ForEach()用于长时间运行的进程,c#,task-parallel-library,parallel.foreach,C#,Task Parallel Library,Parallel.foreach,我有一个如下实现: Parallel.ForEach(dtJobs.AsEnumerable(),new ParallelOptions{MaxDegreeofParalellism=5},dataRow=> { some long running process }); 属性MaxDegreeOfParalElism=5将仅创建5个线程 我说得对吗?如果没有,请纠正我。来自: MaxDegreeOfParallelism属性影响传递给此ParallelOpti
Parallel.ForEach(dtJobs.AsEnumerable(),new ParallelOptions{MaxDegreeofParalellism=5},dataRow=>
{
some long running process
});
属性MaxDegreeOfParalElism=5将仅创建5个线程
我说得对吗?如果没有,请纠正我。来自:
MaxDegreeOfParallelism属性影响传递给此ParallelOptions实例的并行方法调用运行的并发操作数。正属性值将并发操作数限制为设定值。如果为-1,则对并发运行的操作数没有限制
默认情况下,For和ForEach将使用底层调度程序提供的线程数量,因此从默认值更改MaxDegreeOfParallelism只会限制将使用的并发任务数量
因此,是的,它将最大输出为5。它不能保证达到5个线程,这取决于底层调度程序提供的线程数量。它最多将创建5个线程。请参阅感谢澄清我们可以将其用于长时间运行的流程吗?并行完成
大约需要10分钟。ForEach
?您应该考虑到它在幕后使用ThreadPool
,并且您并不真的想用长时间运行的操作来耗尽线程池。我建议你看看我对你上一个问题的回答: