我有 3 个应该并行运行的任务。我需要等待所有 3 个,然后继续处理他们的结果。所以像:
var results = await Task.WhenAll(task1, task2, task3);
return process(results);
当所有 3 个任务都成功完成时,这工作正常。但是,如果其中一个失败,我会得到一个一直冒泡的异常。这不是我想要的。如果这些任务中的任何一个抛出InvalidOperationException
我可以继续处理,我只需要该process
方法可以访问抛出的异常。
我意识到我可以try...catch
在任务范围内,但这似乎不是一个黑客。除了语义不正确(任务 DID 失败 - 它不应该成功返回)之外,如果我采用这种方法,由于结果可能成功或返回异常,我将不得不返回自定义类型。然而,该Task<T>
对象已经公开了一个异常通道,所以我宁愿不做双重职责,而只使用已经存在的东西。