首页 > 编程语言 >C# AggreateException

C# AggreateException

时间:2023-05-01 10:23:50浏览次数:26  
标签:Task Console C# failed 任务 AggregateException 异常 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

标签:Task,Console,C#,failed,任务,AggregateException,异常,AggreateException
From: https://www.cnblogs.com/johnyang/p/17366219.html

相关文章

  • MySQL Workbench和phpMyAdmin
    MySQLWorkbench是MySQL官方提供的一款开源的图形化管理工具,可以用于设计、开发、管理和维护MySQL数据库。MySQLWorkbench提供了一个集成开发环境(IDE),其中包含多个工具和功能,包括:1.数据建模工具:可以用于设计数据库模型、创建和编辑表、定义列、设置约束等。2.SQL编辑器:可以用......
  • landbench讲解
    spatialoffset空间偏移量(spatialoffset)Splicexaccordingtothesphereshape根据球体形状拼接xvalid_split有效分割split_ratio拆分比率torch.from_numpy(x_batch).to(device)解释他torch.from_numpy(x_batch)将一个NumPy数组x_batch转换为PyTorch张量。......
  • Mac终端出现 brew command not found 解决
    MacOS上您需要安装unrar以支持PaddlePaddle,可以使用命令brewinstallunrar执行命令后发现brew不存在jimmy@MacBook-Pro~%brewinstallunrarzsh:commandnotfound:brewjimmy@MacBook-Pro~%解决方案输入命令:jimmy@MacBook-Pro~%/bin/zsh-c"$(curl-fsS......
  • JavaScript相关
    Javascript基础​ JavaScript,是一门能够运行在浏览器上的脚本语言.简称JS.首先,Javascript这个名字的由来就很有意思,不少人认为Javascript和Java貌似很像.容易想象成Java的脚本.但其实不然,两者之间没有任何关系.纯粹是商业碰瓷.​ 那么既然JS是可以运行在浏览器上......
  • CF1624G 题解
    前言题目传送门!更好的阅读体验?比较好玩的二进制题目。思路答案最小,也就是说较高位要尽可能小。所以很容易想到从最高位开始枚举。第\(i\)位为\(0\),等价于选出的所有边的第\(i\)位都为\(0\)。同时,由于我们是贪心,如果之前枚举过的第\(j\)位可以是\(0\),那么这两个条件......
  • c#-随机数组
    publicstaticint[]GenerateRandowArray(intmaxSize,intmaxValue){Randomrd=newRandom();int[]arr=newint[(int)((maxSize+1)*rd.NextDouble())];for(inti=0;i<arr.Length;i++){arr[i]=(in......
  • CF 1709E XOR Tree(树上启发式合并)
    题目链接:https://codeforces.com/contest/1709/problem/E解题思路:定义sum(x,y)为x→y路径上的点的异或和,dx 为x→root路径上的点的异或和。对于一个点权树,sum(x,y)=dx ^dy ^vallca(x,y)。考虑修改一个点,可以将它改为一个很大的2为底数的幂,则经过此点的所有的不合......
  • MySQL基础命令 | ChatGPT问答记录
    问:MySQL基础命令ChatGPT:MySQL是一种流行的开源关系型数据库管理系统(RDBMS),以下是一些常见的MySQL基础命令:连接到MySQL服务器:mysql-uusername-ppassword-hhostname创建数据库:CREATEDATABASEdatabase_name;删除数据库:DROPDATABASEdatabase_name;选......
  • SystemVerilog for Design Edition 2 Chapter 2
    SystemVerilogforDesignEdition2Chapter2SystemVerilogDeclarationSpacesVerilogonlyhaslimitedplacesinwhichdesignerscandeclarevariablesandotherdesigninformation.SystemVerilogextendsVerilog’sdeclarationspacesinseveralways.These......
  • 用excel函数解析身份证中的出生年月
      首先我们观察上图,第二代身份证包括18位,其中7到14位代表这位公民的出生年月日,我们可以利用left()、right()函数嵌套使用获取出生年月。方法一:先获取身份证字符串右侧的12位,再从获取的字符串中获取左侧8位;=LEFT(RIGHT(C2,12),8) 方法二:先获取身份证字符串左侧的14位,再......