如何捕获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 妈妈生日祝福语简短励志