给定一个同时执行CPU和IO工作的异步方法,例如:
Public Async Function RunAsync() As Task
DoWork()
Await networkStream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(False)
End Function
哪个是C#Task.Run(() => RunAsync())
的VB等价物?
Await Task.Run(Function() RunAsync())
' or
Await Task.Run(Sub() RunAsync())
Task.Run中的Async / Await关键字是必要还是冗余? This comment声称他们是多余的,但this answer表明在某些情况下可能有必要:
Await Task.Run(Async Function()
Await RunAsync()
End Function)
ConfigureAwait在Task.Run中是否有用?
Await Task.Run(Function() RunAsync().ConfigureAwait(False))
Await Task.Run(Async Function()
Await RunAsync().ConfigureAwait(False)
End Function)
以上5个Task.Run选项中的哪一个是最佳做法?
注意:有一个类似的问题How to call Async Method within Task.Run?,但对于C#,所选答案有否定投票,并且没有解决配置备件问题。
答案 0 :(得分:11)
哪个是C#
Task.Run(() => RunAsync())
的VB等价物?
我的VB非常生疏,但它不应该是Sub
,所以我会选择:
Task.Run(Function() RunAsync())
Task.Run中的Async / Await关键字是必要的还是冗余的?
我有blog post on the subject。在这种情况下,它们是多余的,因为委托是微不足道的。
ConfigureAwait在Task.Run中是否有用?
仅当您执行Await
。