stb*_*stb 2 .net c# task-parallel-library async-await tpl-dataflow
Action直接指定或Func<Task>使用.NET TPL Dataflow有ActionBlock什么区别?
直接行动:
new ActionBlock<Message[]>(x => DoSomething(x))
Run Code Online (Sandbox Code Playgroud)
任务:
new ActionBlock<Message[]>(x => Task.Run(() => DoSomething(x)))
Run Code Online (Sandbox Code Playgroud)
我试图了解并行执行方面的差异(MaxDegreeOfParallelism> 1).
TPL Dataflow支持两个async和同步委托,因此并行度没有区别.它"知道" await返回的任务,表示项目的异步执行,而不是继续下一个项目.在这两种情况下,MaxDegreeOfParallelism只会同时处理项目.第一个选项将使用同步委托(即Action),而第二个选项将使用同步委托async(即Func<Task>).
但是,使用Task.Run会占用每个项目执行的额外线程,只有在完成后才将其释放回线程池.它没有任何理由将工作卸载到另一个线程.所以不要使用它,它没有增加任何价值.