动态更改TPL数据流块的最大并行度

3

当我创建一个数据流块时,我会像这样指定它的MaxDegreeOfParallelism

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

有没有办法稍后更改?
2个回答

5
不,你不能这样做。
你可以创建一个足够高的MDOP(可能是Unbounded),并使用SemaphoreSlim来限制实际需要的并行度。
然后,当你想改变并行度时,调用Release(int releaseCount)(增加它)或在循环中等待await WaitAsync()(减少它)。

你还想在这种情况下使用Dataflow Block吗? - Chris

2

不行,您不能在使用同一块的同时更改度数。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接