如何捕获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 官宣新年祝福语简短