如何捕获C#中的异步void方法引发的异常?
在同步C#代码中,异常将在调用堆栈中传播,直到它们到达可以处理该异常的适当的catch块为止。但是,异步方法中的异常处理不是那么简单。
C#中的异步方法可以具有三种类型的返回值:void,Task和Task。当异步方法的返回类型为Task或Task发生异常时,该异常对象将包装在AggregateException的实例中并附加到Task对象。
如果抛出多个异常,则所有异常都存储在Task对象中。
例子1
static async Task Main(string[] args) {
await DoSomething();
Console.ReadLine();
}
public static async Task Foo() {
throw new ArgumentNullException();
}
public static async Task DoSomething(){
try{
await Foo();
}
catch (ArgumentNullException ex){
Console.WriteLine(ex);
}
}输出结果
System.ArgumentNullException: Value cannot be null. at DemoApplication.Program.Foo() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 37 at DemoApplication.Program.DoSomething() in C:\Users\Koushik\Desktop\Questions\ConsoleApp\Program.cs:line 44
热门推荐
10 新人红包祝福语简短精辟
11 幼师给毕业祝福语简短
12 生日高考祝福语妹妹简短
13 下飞机祝福语简短英文
14 元宵发客户祝福语简短
15 爸妈金婚文案祝福语简短
16 新郎朋友红包祝福语简短
17 虎年五一祝福语大全简短
18 出阁宴祝福语姐姐简短