TPL 数据流块中的异步/同步工作器委托。哪个更好?

Posted

技术标签:

【中文标题】TPL 数据流块中的异步/同步工作器委托。哪个更好?【英文标题】:Async/Sync worker delegate in TPL Dataflow block. Which better? 【发布时间】:2014-04-10 16:21:50 【问题描述】:

两者之间有什么区别:

Dim Block As New TransformBlock(Of Integer, Integer)(Function(_i)
                                                     //sync proccessing
                                                       Return j
                                                     End Function)

   Dim Block As New TransformBlock(Of Integer, Integer)(Async Function(_i)
                                                       Return Await something
                                                     End Function)

即使我使用同步委托,设置块的 MaxDegreeOfParallelerism 也会影响其性能。因此,据我所知,block 从它的同步委托中创建了一个 Task(Of T) 并使用它的实例。

最好使用哪种变体?

【问题讨论】:

【参考方案1】:

当您有自然异步的工作要做(例如,I/O-bound)时使用异步委托。

当您有自然同步的工作要做(例如,受 CPU 限制)时,请使用同步委托。

没有一个是“更好的”;这取决于你需要做什么样的工作。

【讨论】:

【参考方案2】:

由于委托在新的工作线程上运行,我想知道异步委托或同步委托是否会在性能上有太大差异。

例如,同步委托正在读取一个大文件,并且由于它在工作线程上运行,因此它也不会阻塞主线程。

【讨论】:

这似乎更像是一个评论而不是一个答案,因为你不确定它是否会起作用。

以上是关于TPL 数据流块中的异步/同步工作器委托。哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章

具有有限容量的转换块中的 TPL 数据流异常

js: call 同步异步 事件委托 判断数据类型

同步方法和同步块,哪个是更好的选择?

TPL Dataflow 如何与“全局”数据同步

java同步相关

在 TPL 任务中包装 .NET Remoting 异步方法