动态更改TPL数据流阻止.MaxDegreeOfParallelerism

时间:2014-03-16 18:56:02

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

当我创建数据流块时,我指定它的.MaxDegreeOfParallelerism如下:

...New ExecutionDataflowBlockOptions With 
   {.MaxDegreeOfParallelism = System.Environment.ProcessorCount - 1}...

以后有什么方法可以改变吗?

2 个答案:

答案 0 :(得分:5)

不,你不能这样做。

您可以做的是使用足够高的MDOP(可能是Unbounded)创建块,并使用SemaphoreSlim将并行度限制为您实际需要的值。

然后,当您想要更改并行度时,请在循环中调用Release(int releaseCount)(增加它)或await WaitAsync()(以减少它)。

答案 1 :(得分:2)

没有。使用相同的块时,您无法更改度数。

但是,您可以从一开始就将其设置为更高的数字,并且只会根据需要使用它(因此Max)。

或者您可以创建一个更高MaxDegreeOfParallelism的新块,并在等待旧块完成时开始向其发布项目。