首页 > 解决方案 > 为什么在不等待的方法上使用 async 修饰符时编译器不会出错?

问题描述

以下代码仅引发警告并编译正常:

async void Do() {
      Console.WriteLine("Hello");
}

为什么允许非等待异步方法?没有意义。

请注意我不是在问异步等待是如何工作的,我只是想知道为什么上面的代码编译没有错误。

标签: c#.netasync-await

解决方案


编译器允许这样做是因为编译器的工作是遵循语言规范,而语言规范并没有明确排除这种情况。可以吗?也许。但是有很多明显错误的东西在语义上是合法的,因此是编译器允许的。在其中一些情况下,包括这个,编译器(或有时:内置分析器,而不是严格意义上的编译器)会发出警告以提醒您注意这一事实。所以:编译器非常清楚这不是一个很好的举措,但编译器也知道这并不是要在没有充分理由的情况下阻止你。


推荐阅读