【问题标题】:What is the difference between specifying Action directly or Task-Generator with TPL dataflow ActionBlock?直接指定 Action 或使用 TPL 数据流 ActionBlock 指定 Task-Generator 有什么区别?
【发布时间】:2014-12-04 04:18:03
【问题描述】:

直接指定Action 或使用.NET TPL 数据流ActionBlock 指定Func<Task> 有什么区别?

直接行动:

new ActionBlock<Message[]>(x => DoSomething(x))

任务:

new ActionBlock<Message[]>(x => Task.Run(() => DoSomething(x)))

我正在尝试了解并行执行方面的差异 (MaxDegreeOfParallelism > 1)。

【问题讨论】:

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


    【解决方案1】:

    TPL 数据流同时支持async 和同步委托,因此在并行度方面没有区别。它“知道”到await 返回的代表项目异步执行的任务,并且不会继续执行下一个项目。在这两种情况下,将同时处理不超过MaxDegreeOfParallelism 个项目。第一个选项将使用同步委托(即Action),而第二个选项将使用async 一个(即Func&lt;Task&gt;)。

    但是,使用Task.Run 会为每个项目的执行占用一个额外的线程,只是在完成后将其释放回线程池。它无缘无故地将工作卸载到另一个线程。所以不要使用它,它没有任何价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 2022-08-11
      • 2021-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多