我有一个简单的结构,我很难理解为什么它工作(或不工作)我认为它应该如何工作。
基本上有两种方法
private async void DoStuff()
{
try {
AuthenticationStuff();
}catch(UnauthorizedAccessException){
UI.Display("AMAGAD!");
}
}
private async void AuthenticationStuff()
{
var user = GetUser();
if(user == null) throw new UnauthorizedAccessException();
DoMoreAuthenticationStuff();
}
现在的问题是异常永远不会到达DoStuff()
方法的处理程序。我的第一直觉是“嘿,这是一个异步方法,我必须等待它”,但我也不能这样做,因为显然 async void 与 async 不同Task<void>
。
我试图了解这里发生了什么。为什么异常不进入处理程序,而是调试器在"DoMoreAuthenticationStuff()
" 处中断并出现未处理的异常错误?