热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

等待与task.Result相同的已完成任务?

等待与task.Resul

这里已经有一些不错的答案/评论,但是只是为了…

有两个原因为什么我喜欢awaitResult(或Wait)。首先是错误处理不同;await不会将异常包装在中aggregateexception。理想情况下,异步代码根本不需要处理aggregateexception,除非它特别想要 处理。

第二个原因有些微妙。正如我在博客(和书中)中所描述的那样,Result/Wait可能导致死锁,并且在async方法中使用时可能会导致更细微的死锁。因此,当我阅读代码并看到Result或时Wait,这是立即警告标志。的Result/ Wait如果你是唯一正确的绝对肯定 的任务已经完成。这不仅一目了然(在现实世界的代码中),而且对代码的更改也更加脆弱。

这并不是说Result/ Wait应该 永远不会 被使用。我在自己的代码中遵循以下准则:


  1. 应用程序中的异步代码只能使用await

  2. 如果代码确实需要,则异步实用程序代码(在库中)有时可以使用Result/ Wait。这种用法可能应该有注释。


  3. 并行 任务代码可以使用ResultWait

请注意,(1)到目前为止是最常见的情况,因此,我倾向于在await所有地方使用并将其他情况视为一般规则的例外。





推荐阅读
author-avatar
gauss
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有