Geo*_*uer 6 .net error-handling async-await
我有3个应该并行运行的任务.我需要等待所有3,然后继续处理他们的结果.所以类似于:
var results = await Task.WhenAll(task1, task2, task3);
return process(results);
Run Code Online (Sandbox Code Playgroud)
当所有3个任务成功完成时,此工作正常.但是,如果其中一个失败,我会得到一个异常的异常.这不是我想要的.如果这些任务中的任何一个抛出InvalidOperationException我可以继续处理,我只需要该process方法就可以访问抛出的异常.
我意识到我可以try...catch在任务中,但这似乎不是一个黑客.除了在语义上不正确(任务DID失败 - 它不应该成功返回),如果我采用这种方法,因为结果可以成功或返回异常,我将不得不返回自定义类型.Task<T>然而,该对象已经暴露了一个Exception通道,所以我宁愿不做双重任务而只是使用已经存在的东西.
您可以像下面的示例一样处理这种情况:
Task<T>[] tasks = new Task<T>[] { task1, task2, task3 };
try
{
await Task.WhenAll(tasks);
}
catch(InvalidOperationException exception) // If you need to handle any other exception do it
{
// handle it if you wan to
}
// You can use task1.IsFauled to know if current task failed,
// and you can use task1.Exception to know why it failed
return process(tasks.Where(t => !t.IsFauled).ToArray());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1166 次 |
| 最近记录: |