Task.Run应该如何在VB.NET中调用异步方法?

时间:2017-02-02 18:38:27

标签: vb.net async-await

给定一个同时执行CPU和IO工作的异步方法,例如:

Public Async Function RunAsync() As Task
    DoWork()
    Await networkStream.WriteAsync(buffer, 0, buffer.Length).ConfigureAwait(False)
End Function

以下哪个选项是从Visual Basic中的Task.Run调用该异步方法的最佳方法?为什么?

哪个是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#,所选答案有否定投票,并且没有解决配置备件问题。

1 个答案:

答案 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