avo*_*avo 3 .net c# task-parallel-library cancellation async-await
我正在进行代码审查,我担心这种模式,在该代码中随处可见:
try
{
await DoSomethingAsync();
await DoSomethingElseAsync();
// and so on...
}
catch (OperationCanceledException)
{
// all good, user cancelled
// log and return
return;
}
// handle other particular exceptions
// ...
catch (Exception ex)
{
// fatal error, alert the user
FatalErrorMessage(ex);
}
Run Code Online (Sandbox Code Playgroud)
我关心的部分是处理OperationCanceledException。这段代码不应该也处理AggregateException和检查唯一的内部异常吗OperationCanceledException?
我知道Task.Wait或者Task.Result会抛出AggregateException这样的,而不是OperationCanceledException. 代码的作者向我保证她只使用async/awaitinside out 而从不使用Wait/Result. AggregateException因此,她不喜欢额外观察取消的想法。然而,我的观点是一些基于标准的TaskBCL API 仍然可以用 包装OperationCanceledException,AggregateException例如因为它们仍然可能在内部访问Task.Result。
是否有意义?我们是否应该担心处理两者OperationCanceledException并AggregateException正确观察取消?
然而,我的观点是,一些标准的基于任务的 BCL API 仍然可以用 AggregateException 包装 OperationCanceledException,例如,因为它们仍然可能在内部访问 Task.Result。
不,他们不会那样做。
我们是否应该担心处理 OperationCanceledException 和 AggregateException 以便正确观察取消?
我会说不。当然,an可以AggregateException包含 an OperationCanceledException,但它也可以同样轻松地包含other particular exceptions。
只要您遵循异步最佳实践(即,没有异步之上同步或同步之上异步),那么您就不必担心这一点。
| 归档时间: |
|
| 查看次数: |
355 次 |
| 最近记录: |