作者:gauss | 来源:互联网 | 2023-10-12 16:41
这里已经有一些不错的答案/评论,但是只是为了…
有两个原因为什么我喜欢await
过Result
(或Wait
)。首先是错误处理不同;await
不会将异常包装在中aggregateexception
。理想情况下,异步代码根本不需要处理aggregateexception
,除非它特别想要 处理。
第二个原因有些微妙。正如我在博客(和书中)中所描述的那样,Result
/Wait
可能导致死锁,并且在async
方法中使用时可能会导致更细微的死锁。因此,当我阅读代码并看到Result
或时Wait
,这是立即警告标志。的Result
/ Wait
如果你是唯一正确的绝对肯定 的任务已经完成。这不仅一目了然(在现实世界的代码中),而且对代码的更改也更加脆弱。
这并不是说Result
/ Wait
应该 永远不会 被使用。我在自己的代码中遵循以下准则:
- 应用程序中的异步代码只能使用
await
。
- 如果代码确实需要,则异步实用程序代码(在库中)有时可以使用
Result
/ Wait
。这种用法可能应该有注释。
并行 任务代码可以使用Result
和Wait
。
请注意,(1)到目前为止是最常见的情况,因此,我倾向于在await
所有地方使用并将其他情况视为一般规则的例外。