【C#】52. 使用Flatten方法处理并行任务抛出的异常
来源:互联网 发布:手机上淘宝网怎么付款 编辑:程序博客网 时间:2024/06/03 16:21
本篇主要讨论一下InnerException的处理方法flatten。
async static Task<string> GetInfoAsync(string name, int seconds){await Task.Delay(TimeSpan.FromSeconds(seconds));throw new Exception(string.Format("Boom from {0}!", name));}
1、先看一下单个错误的情况,这个比较简单,不存在嵌套异常。
async static Task AsynchronousProcessing(){Console.WriteLine("1. Single exception");try{string result = await GetInfoAsync("Task 1", 2);Console.WriteLine(result);}catch (Exception ex){Console.WriteLine("Exception details: {0}", ex);}}
2、对于并行任务仍然使用上述Try Catch只能捕获第一个异常错误,而不是全部错误。
Console.WriteLine("2. Multiple exceptions");Task<string> t1 = GetInfoAsync("Task 1", 3);Task<string> t2 = GetInfoAsync("Task 2", 2);try{string[] results = await Task.WhenAll(t1, t2);Console.WriteLine(results.Length);}catch (Exception ex){Console.WriteLine("Exception details: {0}", ex);}
3、最后是正确的处理方法,要在catch中对InnerException进行Flatten处理
Console.WriteLine("2. Multiple exceptions with AggregateException");var t1 = GetInfoAsync("Task 1", 3);var t2 = GetInfoAsync("Task 2", 2);Task<string[]> t3 = Task.WhenAll(t1, t2);try{string[] results = await t3;Console.WriteLine(results.Length);}catch{var ae = t3.Exception.Flatten(); //这句话是关键!var exceptions = ae.InnerExceptions;Console.WriteLine("Exceptions caught: {0}", exceptions.Count);foreach (var e in exceptions){Console.WriteLine("Exception details: {0}", e);Console.WriteLine();}}
0 0
- 【C#】52. 使用Flatten方法处理并行任务抛出的异常
- 抛出异常的方法
- Struts2使用Displaytag导出Excel,抛出nullException异常的处理
- JSP servlet里面使用getServletContext()抛出NullPointer异常的处理
- c抛出异常给java处理
- Objective-C 编程语言(11)异常处理----捕获多种类型的异常、抛出异常
- 在指定方法中抛出异常,在调用该方法的地方处理异常
- 使用 Rx 的计算和最大化线程处理并行任务
- 【C#】61. 并行查询的异常处理 PLINQ Exception
- 第04章 异常处理 06 声明方法抛出的异常
- operator new抛出异常的处理
- 异常的定义、抛出和处理
- 异常机制第三十七课,声明异常throw,方法重写中异常的处理,手动抛出异常
- 75_异常机制_声明异常throw_方法重写中异常的处理_手动抛出异常
- java错误异常处理时一定要处理抛出的异常
- 使用Fork/Join框架在任务中抛出异常
- 10.7抛出异常处理
- 抛出处理异常
- 数据结构——图—最小生成树(普里姆算法和克鲁斯卡尔算法)
- 二项树及二项队列
- [Java基础]接口能否被实例化以及匿名内部类
- 运行时加载DLL
- [51nod 1223]分数等式的数量
- 【C#】52. 使用Flatten方法处理并行任务抛出的异常
- vue2.0(新手)第一个坑--do not mount Vue to <body>!!!
- matlab-基于IBM服务器”VideoReader没有注册类“解决全过程
- Python install ggplot in Rodeo
- 导入第三方框架ReactiveCocoa经常出现的问题 如出现Could not build module ‘ReactiveCocoa’
- 磁盘调度算法(FCFS&&SSTF)
- 正确加载 Javascript 和 CSS 到 WordPress
- 冒泡排序
- Vue+webpack构建单页router应用(二)