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 数据流块中的异步/同步工作器委托。哪个更好?的主要内容,如果未能解决你的问题,请参考以下文章