【发布时间】:2018-09-12 13:03:03
【问题描述】:
我目前正在开发一个在 C# 中广泛使用 async 和 await 关键字的大型应用程序。我们的 IO 调用自始至终都是异步的。
使用不等待的异步调用时(无意中,因为开发人员忘记使用它),可能会遇到任务取消和其他不希望的行为,因为不等待结果。
例如doSomethingAsync().ConfigureAwait(false)vs
await doSomethingAsync().ConfigureAwait(false)
有什么方法可以简洁地识别未正确等待的异步方法的用法?
理想情况下,我们可以对它进行单元测试(我们也始终使用 DI)。简单的方法测试是不可靠的,因为完成的任务本质上变成了一种竞争条件,它会经常成功,偶尔会失败。
如果无法对此进行单元测试,有没有办法大量搜索和隔离这些实例?
【问题讨论】:
-
在
async方法中,未等待的任务显示为警告。 -
只是想知道 resharper 是否可以做到?
-
@I3arnon,哦,酷,你是对的。所以,我只是看了一下,结果发现 Resharper 可以提供帮助。我可以告诉它在解决方案中识别该警告的任何实例,看起来它可以解决问题!我单击了一个实例旁边的 Resharper 灯泡,它位于该上下文菜单的选项中。
-
见
CS4014。 IE。 “警告 CS4014:由于未等待此调用,因此在调用完成之前继续执行当前方法。考虑将 'await' 运算符应用于调用结果。” -
最简单的方法可能是打开“将所有警告视为错误”。这将迫使您的团队清理他们的代码。 :)
标签: c# visual-studio async-await