“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 表达式或语句,该方法同步执行。编译器 警告提醒您任何不包含等待的异步方法, 因为那种情况可能表示错误
问题
如果是这样, else 是什么单词async
会使我的代码产生不同的结果?
答案 0 :(得分:7)
async
方法捕获所有异常,不要将它们抛出到方法的调用者,而是将它们包含在方法返回的Task
中,将其标记为出错{ {1}}。如果方法是Task
,则会在应用程序级别抛出错误,如您所见,因为无法通过async void
观察异常。