C# AggreateException
在 C# 中,AggregateException 是一种特殊类型的异常,它允许在多个异步任务中捕获并组合多个异常。当在一个异步任务中同时执行多个子任务时,如果其中任何一个子任务抛出了异常,那么父任务将会收到 AggregateException 异常,它包含一个或多个内部异常,每个内部异常代表一个子任务抛出的异常。
在实际编程中,AggregateException 常常用于处理并发编程中的多个异步任务中的异常。举个例子,假设我们需要同时从多个网站上爬取数据,我们可以将每个网站的爬取任务封装成一个异步方法,再使用 Task.WhenAll 方法来等待所有任务完成。如果有一个或多个任务抛出异常,那么 Task.WhenAll 方法将会抛出 AggregateException 异常。
下面是一个简单的示例,演示了如何使用 AggregateException 来处理多个任务中的异常:
Task taskResult = null;
var tasks = new Task[] {
Task.Run(() => { throw new Exception("Task 1 failed"); }),
Task.Run(() => { throw new Exception("Task 2 failed"); }),
Task.Run(() => { throw new Exception("Task 3 failed"); })
};
try
{
await (taskResult= Task.WhenAll(tasks));
}
catch (Exception e)
{
if(e is AggregateException ex)
{
Console.WriteLine($"Caught {ex.InnerExceptions.Count} exceptions:");
foreach (var innerEx in ex.InnerExceptions)
{
Console.WriteLine(innerEx.Message);
}
}
else
{
foreach(var exx in taskResult.Exception.InnerExceptions)
{
Console.WriteLine($"inner exception {exx.Message}");
}
Console.WriteLine(e.Message);
}
}
Console.WriteLine();
在上面的示例中,我们创建了三个异步任务,每个任务都会抛出一个异常。然后我们使用 Task.WhenAll 方法等待所有任务完成,并在 try-catch 块中捕获 AggregateException 异常。如果有任何一个任务抛出异常,那么 AggregateException 异常将包含所有子异常,我们可以使用 InnerExceptions 属性来访问它们。
output:
inner exception Task 1 failed
inner exception Task 2 failed
inner exception Task 3 failed
Task 1 failed
C# AggreateException的更多相关文章
- Serilog 源码解析——Sink 的实现
在上一篇中,我们简单地查看了 Serilog 的整体需求和大体结构.从这一篇开始,本文开始涉及 Serilog 内的相关实现,着重解决第一个问题,即 Serilog 向哪里写入日志数据的.(系列目录) ...
随机推荐
- Hive - 数据流转与DDL设计
数据流转设计 表的分类 按所有权分类可分为:外部表(外表)和托管表(内部表.内表). 按表的存储格式分类可分为:Text表.Orc表.Torc表.Holodesk表.Hyperbase表.ES表 按表 ...
- Elasticsearch7.8搭建(Windows版本单节点、Linux版本单节点、集群,)
The Elastic Stack, 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安全可靠地获取任何来源.任何格式的数据,然后实 ...
- SparkRDD算子(transformations算子和actions算子)
RDD提供了两种类型的操作:transformation和action1.所有的transformation都是采用的懒策略,如果只是将transformation提交是不会执行计算的,计算只有在ac ...
- python excel 数据整理:如何删除重复的记录
data = frame.drop_duplicates(subset='', keep='first', inplace='') drop_duplicates用法:subset='需要去重复的列名 ...
- Netty基础—3.基础网络协议
大纲 1.网络基础的相关问题总结 2.七层模型和四层模型 3.物理层(网线 + 光缆 + 01电信号) 4.数据链路层(以太网协议 + 网卡mac地址) 5.网络层(IP协议 + 子网划分 + 路由器 ...
- dockerfile 由于公钥不可用,无法验证以下签名
报错 当我在打包 docker镜像时,发生了报错 $ sudo docker build -t dcgm-exporter:3.2.5 . 1.772 The following signatures ...
- chrome播放webRTC的H265视频方法
需求描述 最近有需求实现浏览器直接播放摄像头视频 鉴于Camera本身支持了rtsp流,本想web直接播放rtsp,但是还不行,搜了一下webRTC实现的效果和延迟会好一些.于是就使用了mediaMT ...
- 深入掌握Map的这8个操作方法,让代码更简洁优雅
Map 是我们经常使用的数据结构接口,它的子类 HashMap.ConcurrentHashMap 也是我们使用比较频繁的集合. 了解了 Map 接口中的方法,也就相当于知道了其子类中的可用方法,管它 ...
- [源码系列:手写spring] IOC第十二节:FactoryBean
内容介绍 在 Spring 框架中,FactoryBean 是一个特殊的工厂类接口,用于创建和管理复杂的 bean 对象.它允许你自定义 bean 的创建逻辑,并且可以在 bean 创建过程中执行一些 ...
- 一个检查左右括号是否配对的语法检查器(c语言)
目录 一.题目如下 二.解题思路 三.代码实现 四.测试结果 一.题目如下 通过键盘输入一个包括 '(' 和 ')' 的字符串string ,判断字符串是否有效.要求设计算法实现检查字符串是否有效,有 ...