使用Visual Studio在代码中查找等待的方法

我有一个问题,在代码中调用async方法而不在它前面await 。 有没有办法找到所有await

编辑 – 我特别关注调用多个异步方法的方案(忽略返回值),但只有一个方法await ,这足以使Visual Studio不对其发出警告。

如果您使用ReSharper并打开解决方案范围的分析,那么返回未正在等待的任务的方法将使方法签名的任务部分由于“未使用返回值”而变灰。 需要注意的是,这只会找到解决方案中任何地方都无法等待的方法; 更新一个或多个用法以等待(或使用/引用Task )后,警告将消失。

如果您正在寻找不包含await调用的异步方法(意味着它们不需要标记为异步),ReSharper也会以类似的方式告诉您。

  class AClass { public async void Foo() //async grayed out { DoSomethingAsync(); Console.WriteLine("Done"); } public Task DoSomethingAsync() //Task grayed out { return Task.Run(() => true); } } 

请注意,如果您的代码如下所示,则无效:

  class AClass { public async void Foo() { bool b = DoSomethingAsync().Result; Console.WriteLine("Done"); } public Task DoSomethingAsync() { return Task.Run(() => true); } } 

async关键字(如果存在)仍然会被标记,这意味着你可能很快就会发现一个任务没有被等待,但是如果调用方法没有标记为异步,那你就不走运了。