我遇到一个问题,即在没有async
的代码中调用await
方法。有没有办法找到没有await
的所有等待方法?
编辑 - 我特别关注调用多个异步方法的方案(忽略返回值),但只有一个方法有await
就足以制作Visual Studio没有对此发出警告。
答案 0 :(得分:0)
如果您使用ReSharper并启用解决方案范围的分析,那么返回未正在等待的任务的方法将使方法签名的任务部分变灰,因为"未使用返回值。 #34;需要注意的是,这只会找到解决方案中任何地方都无法等待的方法;更新一个或多个用法以等待(或使用/引用Task
)后,警告将消失。
如果您正在寻找不包含等待通话的异步方法(意味着它们不需要标记为异步),ReSharper也会以类似的方式告诉您这一点。
class AClass
{
public async void Foo() //async grayed out
{
DoSomethingAsync();
Console.WriteLine("Done");
}
public Task<bool> DoSomethingAsync() //Task<bool> grayed out
{
return Task.Run(() => true);
}
}
请注意,如果您的代码如下所示,则无效:
class AClass
{
public async void Foo()
{
bool b = DoSomethingAsync().Result;
Console.WriteLine("Done");
}
public Task<bool> DoSomethingAsync()
{
return Task.Run(() => true);
}
}
async
关键字(如果存在)仍然会被标记,这意味着您可能很快就会发现没有等待任务,但如果调用方法未标记为异步,则表示运气不佳。