从这里:
该
“async”关键字在该方法中启用"await"关键字,并 更改方法结果的处理方式.这就是async关键字的全部功能!
第二部分让我感兴趣,但我没有在文章中找到解释.
做一点测试(注意 - 没有等待的任务在这里):
static void X()
{
try
{
Y();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static async void Y() //<---- notice here
{
throw new NotImplementedException();
}
static void Main(string[] args)
{
X();
Console.ReadLine();
}
Run Code Online (Sandbox Code Playgroud)
这将终止该程序:

虽然移除 async从这个:
static async void Y()
{
throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)
将产量:

MSDN对此一无所知:
如果async关键字修改的方法不包含await表达式或语句,则该方法将同步执行.编译器警告会提醒您任何不包含await的异步方法,因为这种情况可能表示错误
题
那么,是什么别的这个词async确实是我的代码可以产生不同的结果?
async方法捕获所有异常,不要将它们抛出到方法的调用者,而是将它们包含在Task方法返回的内容中,将其标记为出错Task.如果方法是async void,则在应用程序级别抛出错误,如您所见,因为无法通过a观察异常Task.