使用Visual Studio

时间:2015-07-07 18:24:23

标签: c# visual-studio visual-studio-2013 async-await

我遇到一个问题,即在没有async的代码中调用await方法。有没有办法找到没有await的所有等待方法?

编辑 - 我特别关注调用多个异步方法的方案(忽略返回值),但只有一个方法有await就足以制作Visual Studio没有对此发出警告。

1 个答案:

答案 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关键字(如果存在)仍然会被标记,这意味着您可能很快就会发现没有等待任务,但如果调用方法未标记为异步,则表示运气不佳。