gpt4 book ai didi

c# - 直接指定Action与Task-Generator与TPL数据流ActionBlock有什么区别?

转载 作者:行者123 更新时间:2023-12-03 22:01:14 27 4
gpt4 key购买 nike

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

直接行动:

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

任务:

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

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

最佳答案

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

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

关于c# - 直接指定Action与Task-Generator与TPL数据流ActionBlock有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26274956/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com