“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();
}
这将终止该程序:
从中删除 async
时:
static async void Y()
{
throw new NotImplementedException();
}
将产量:
MSDN对此一无所知:
如果async关键字修改的方法不包含await表达式或语句,则该方法将同步执行 . 编译器警告会提醒您任何不包含await的异步方法,因为这种情况可能表示错误
Question
如果是这样,那么 async
这个词还有什么呢?我的代码产生了不同的结果?
1 回答
async
方法捕获所有异常,不要将它们从堆栈中抛出到方法的调用者,而是将它们包含在方法返回的Task
中,将其标记为出错Task
. 如果方法是async void
,则会在应用程序级别抛出错误,如您所见,因为无法通过Task
观察异常 .