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 向哪里写入日志数据的.(系列目录) ...
随机推荐
- Flink - [08] 状态一致性
题记部分 一.什么是状态一致性 有状态的流处理,内部每个算子任务都可以有自己的状态.对于流处理器内部来说,所谓的状态一致性,其实就是我们所说的计算结果要保证准确.一条数据也不应该丢失,也不应该重复 ...
- 面试题10- I. 斐波那契数列
地址:https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/ <?php /** 写一个函数,输入 n ,求斐波那契(Fibona ...
- [解决方案][docker] Http: server gave HTTP response to HTTPS client
前言 用centos运行docker不支持http,需要在daemon.json 里面配置一下 目录 没有daemon.json 需要添加这个文件 在daemon.json 增添配置 重启即可 一.l ...
- Easyexcel(1-注解使用)
版本依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</a ...
- Ctfhub-SSRF部分做题记录
Ctfhub-SSRF部分做题记录 上传文件 提示:这次需要上传一个文件到flag.php了.祝你好运 进入flag.php 发现没有提交按钮 修改源代码,加个提交按钮 抓包 修改host为127.0 ...
- 【moectf】wp
http 用wsrx打开靶机 根据任务描述 得到moectf{basic_http_knowledge_oen0w64iYZqSeT6BT8c9OgFTV-KNMT6g} Web入门指北 打开pdf文 ...
- [tldr]GO使用正则表达式
简述如何使用GO调用正则表达式 是否符合条件 使用MatchString方法实现 _, err := regexp.MatchString(regex, str) 提取内容 Compile 第一步需要 ...
- centos 防火墙配置,并限制端口
查看防火墙状态 systemctl status firewalld 如果防火墙处于停止状态,则启动它: systemctl start firewalld 并设置防火墙开机自启: systemctl ...
- 初识 PHP 7 源码整体框架
目录 PHP 7 语言的执行原理 编译型语言与解释型语言 PHP 7 语言的执行原理 我们常用的高级语言有很多种,比较出名的有C\C++.Python.PHP.Go.Pascal等.而这些语言根据运行 ...
- Java使用多线程处理未知任务数方案
知道任务个数,你可以定义好线程数规则,生成线程数去跑 代码说明: 虚拟线程池: 使用 Executors.newVirtualThreadPerTaskExecutor() 创建虚拟线程池,每个任务将 ...