在解决方案中找到遗漏等待

Fro*_*ode 4 .net c# asynchronous async-await roslyn-code-analysis

我的服务器代码中有很多异步方法,但我怀疑我有没有等待的调用者.

是否有一种简单的方法来扫描缺少await的调用的代码?

public async Task DomeSomethingAsync() 
{
     var result = await GetResult();
     await StoreResult(result);
}
Run Code Online (Sandbox Code Playgroud)

然后某个地方我忘了使用等待;

public async Task SomeBuggyCode()
{
     await Initialize();
     DoSomethingAsync();  // DOH - Forgot await
}
Run Code Online (Sandbox Code Playgroud)

我希望有一种聪明的方法可以识别这些错误的调用.

Cha*_*ger 7

这应显示为编译器警告CS4014,文本为:

因为不等待该调用,所以在调用完成之前继续执行当前方法.考虑将'await'运算符应用于调用的结果.

请参阅文档

所以你需要做的就是编译代码.VS应该允许您从错误列表导航到相关位置.


gal*_*tor 5

如果缺少的“await”指向编译器知道是异步的方法,则会生成 CS4014 警告。

如果您在通过接口或外部库调用异步方法时错过了等待,它将不起作用。

出于这个原因,值得安装这个 nuget 包:https ://www.nuget.org/packages/Lindhart.Analyser.MissingAwaitWarning/

这将在任何不等待返回任务的方法的情况下引发警告