【问题标题】:Dynamically change TPL Dataflow Block MaxDegreeOfParallelism动态更改 TPL 数据流块 .MaxDegreeOfParallelerism
【发布时间】:2014-03-16 18:56:02
【问题描述】:
当我创建一个数据流块时,我像这样指定它的 .MaxDegreeOfParallelerism:
...New ExecutionDataflowBlockOptions With
{.MaxDegreeOfParallelism = System.Environment.ProcessorCount - 1}...
以后有什么办法改吗?
【问题讨论】:
标签:
c#
.net
task-parallel-library
tpl-dataflow
【解决方案1】:
不,你不能那样做。
您可以做的是创建具有足够高 MDOP 的块(可能是 Unbounded)并使用 SemaphoreSlim 将并行度限制为您真正想要的。
然后,当你想改变并行度时,在循环中调用Release(int releaseCount)(增加它)或await WaitAsync()(减少它)。
【解决方案2】:
没有。使用同一块时不能更改度数。
但是,您可以从一开始就将其设置为更高的数字,它只会根据需要使用(因此Max)。
或者您可以创建一个具有更高MaxDegreeOfParallelism 的新块,然后在等待旧块完成的同时开始向其中发布您的项目。