C# Task.WhenAll 处理异常

标签 c# asynchronous task

我需要有关简单 Task.WhenAll C# 代码的帮助。我同时触发了多达 50 个不同的任务,但是,其中一些调用可能会返回错误消息。

我正在尝试编写异常处理代码,以便我可以处理有效的代码(它确实如此),但捕获错误的代码,以便我可以针对它们执行额外的代码。

存在 AggregateException,但有没有办法查看是哪个调用/输入导致了该异常?

由于严格的公司政策,我无法分享实际代码,但示例如下:

List<ListDetails> libs = getListDetails();
var tasks = new Task<List<ItemDetails>>[libs.Count];
for (int i = 0; i < libs.Count; i++)
{
    tasks[i] = getListItems(libs[i].ServerRelativeUrl, libs[i].ListId);
}

try
{
    await Task.WhenAll(tasks);
}
catch(AggregateException aex)
{
    //Capture which Server RelativeUrls and ListIDs that failed.    
}

最佳答案

等待后可以查询到原来的任务:

var myTasks = ...;

 try {
     await Task.WhenAll(myTasks);
  }
  catch (AggregateException) {
     //swallow everything
  }

foreach (var task in myTasks) {
 if (myTask.Status == RanToCompletion)
  ...
}

关于C# Task.WhenAll 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52698207/

相关文章:

java - 使用 Twitter4j,我如何等待所有异步调用完成?

task - 即使它们成功了,如何在 Airflow 中重新启动 dag 和任务。

c# - 如何从类语法树中获取类语义模型?

javascript - 将 Ember 从 Ember.Object 虚拟数据迁移到 $.get 中的数据时出现问题

c# - 如何在线程中等待异步方法?

C# 线程任务 - 无法从任务数组中获取返回值

c# - 异步 : What practices in large classes?

c# - 使用 Microsoft Graph v1.0 SDK 创建 OnlineMeeting 时出现 Forbidden 403 错误

c# - Entity Framework 核心 : How to include a null related Entity with its null column properties?

c# - 开发团队中具有服务总线触发器的 Azure Functions V2