gpt4 book ai didi

c# - 处理 C# AggregateException 的正确方法

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:49 24 4
gpt4 key购买 nike

我有一个问题,关于在使用 WhenAll() 时何时可以安全地处理聚合异常。看起来自然的位置应该在 catch block 内,因为如果 catch block 从不触发,就意味着没有异常需要处理。但是我看到很多代码都有一个空的 catch block ,并在处理任何发现的异常之前检查是否存在 AggregateException(包括在 MS 网站上)。


public async Task MyMethod() {

var tasks = new List<Task>();
for (var i = 0; i < 10; i++) {
tasks.Add(DoSthAsync());
}

var masterTask = Task.WhenAll(tasks);
try {
var results = await masterTask;
} catch {
// Safe to access masterTask here and handle aggregate exceptions? Have all tasks completed?
foreach (var ex in masterTask.Exception.innerExceptions) {
HandleException(ex);
}
}

// Or necessary to check for and handle aggregate exceptions here?
if (masterTask.Exception != null) {
foreach (var ex in masterTask.Exception.innerExceptions) {
HandleException(ex);
}
}
}

public async Task DoSthAsync() {
// ...
}

最佳答案

It seems like the natural place would be inside the catch block

是的,那会很好。 Task.WhenAll 返回一个在所有任务都完成时完成的任务。因此,在您的情况下,当您的代码进入 catch block 时,masterTask 已完成,这意味着所有 tasks 已完成。

关于c# - 处理 C# AggregateException 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56095190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com