给定一个既包含 CPU 工作又包含 IO 工作的异步方法,例如:
Public Async Function RunAsync() As Task
DoWork()
Await networkStream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(False)
End Function
以下哪个选项是在Visual Basic中从Task.Run调用异步方法的最佳方法,为什么?
在VB中,哪个与C#中的Task.Run(() => RunAsync())
等效?
Await Task.Run(Function() RunAsync())
' or
Await Task.Run(Sub() RunAsync())
在Task.Run中,Async/Await关键字是必需的还是多余的?这个评论声称它们是多余的,但是这个答案表明在某些情况下可能是必需的:
Await Task.Run(Async Function()
Await RunAsync()
End Function)
在Task.Run中使用ConfigureAwait有什么作用?
Await Task.Run(Function() RunAsync().ConfigureAwait(False))
Await Task.Run(Async Function()
Await RunAsync().ConfigureAwait(False)
End Function)
上述的5个Task.Run选项中,哪个是最佳实践?
注意:有一个类似的问题如何在Task.Run内调用异步方法?但它是针对C#的,所选答案有负面评分,并未涉及ConfigureAwait。
Task.Run
来包装它,而不只是使用Await SendAsync()
呢? - Peter BonsTask.Run
旨在运行非异步方法。 - Peter BonsFunc
和Action
之间没有明显的区分。要区分它们,需要确定lambda表达式方法体中的代码是否返回结果。如果有返回结果,则为Func
,否则为Action
。 - InteXX