【问题标题】: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 的新块,然后在等待旧块完成的同时开始向其中发布您的项目。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多