查找在Visual Studio或单元测试中未使用await的async用法

问题描述 投票:3回答:1

我目前正在开发一个大型应用程序,它在C#中广泛使用async和await关键字。我们的IO调用几乎都是异步的。

当使用不等待的异步调用(无意中,因为开发人员忘记使用它)时,由于不等待结果,可能会遇到任务取消和其他不期望的行为。

例如。 doSomethingAsync().ConfigureAwait(false) vs

 await doSomethingAsync().ConfigureAwait(false)

有什么方法可以简洁地确定不等待正确等待的异步方法的用法吗?

理想情况下,我们可以进行单元测试(我们也使用DI)。简单的方法测试是不可靠的,因为完成的任务基本上变成了竞争条件,它经常成功,偶尔也会失败。

如果无法对此进行单元测试,是否有办法在质量上搜索和隔离这些实例?

c# visual-studio async-await
1个回答
1
投票

有一个名为AsyncFixer的VS扩展,它试图提出建议。

https://marketplace.visualstudio.com/items?itemName=SemihOkur.AsyncFixer#qna

它可能会有所帮助,但遗憾的是无法找到这种模式:

Task t = DelayAndThrowAsync(); //永生难免!

您可以明确地执行此操作以使任务“消失”,并且在我的整个代码库异步之前它是一个可接受的停止间隙 - 但现在我几乎需要找到令人讨厌的未经任务的任务。

问题是TaskScheduler.UnobservedTaskException实际上并没有告诉我违规任务在哪里: - /

© www.soinside.com 2019 - 2024. All rights reserved.