C# Task.WhenAll 处理异常

Can*_*der 4 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.    
}
Run Code Online (Sandbox Code Playgroud)

usr*_*usr 7

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

// Tasks taken from any source.
Task[] myTasks = ...;

// Logically wait ("await") for all tasks to complete,
// while ignoring possible exceptions (`Task.WhenAny` doesn't throw).
await Task.WhenAny(Task.WhenAll(myTasks));

// All tasks have completed - examine their outcome as you see fit.
foreach (var task in myTasks) {
 if (myTask.Status == RanToCompletion)
     ...
}
Run Code Online (Sandbox Code Playgroud)

请注意,此答案的先前版本不正确。核心思想是正确的,但代码中有一个错误。