有异步Main有什么意义?

Exe*_*ion 11 async-await c#-7.0

我们知道,C#7允许使Main()函数异步.

它给了什么优势?出于什么目的,您可以使用异步Main而不是普通的Main?

Dav*_*rno 20

实际上是C#7.1引入了异步main.

它的目的是您Main方法直接调用一个或多个异步方法的情况.在C#7.1之前,你必须为该main方法引入一定程度的仪式,例如必须通过调用那些异步方法SomeAsyncMethiod().GetAwaiter().GetResult().

由于能够标记Main为async简化了仪式,如:

static void Main(string[] args) => MainAsync(args).GetAwaiter().GetResult();

static async Task MainAsync(string[] args)
{
    await ...
}
Run Code Online (Sandbox Code Playgroud)

变为:

static async Task Main(string[] args)
{
    await ...
}
Run Code Online (Sandbox Code Playgroud)

有关使用此功能的详细说明,请参阅C#7系列,第2部分:Async Main.

  • “异步主体”的内部实现只是一个执行.Wait()的同步包装器。 (2认同)