等待/等待等待的等待电话时发出警告

时间:2014-06-24 13:32:56

标签: c# async-await

此代码会导致异常丢失。

而不是boo.DoStuff(),它应该是Task.WaitAll(bar.DoStuff())

阻止是完全安全的,因为定时器回调已经在线程池线程上了,而且我没有做任何会使用IOCP的事情。如果我不阻止,我会默默地失去任何例外。

我如何获得VS / ReSharper /某些东西在这条线上给我一个警告?

public class Foo
{
    readonly IBoo _boo;
    readonly Timer _timer;

    public Foo(IBoo boo)
    {
        _boo = boo;
        _timer = new Timer(Beat, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
    }

    void Beat(object state)
    {
        _boo.DoStuff();  // <-- warning wanted here
        // Task.WaitAll(bar.DoStuff());   <-- what I should have written
    }
}

public interface IBoo
{
    Task DoStuff();
}

1 个答案:

答案 0 :(得分:2)

我不知道提供此警告的工具,但Resharper是可扩展的。他们最近开源了一个扩展代码,用于标记源代码中的所有分配。编写扩展名似乎并不难。它将触发返回Task的所有方法调用,并且不会立即以任何方式使用调用结果。

但是,如果方法返回在其他位置轮询错误信息的任务,则可能会遇到误报。不过,这是一个有用的警告。我经常看到Stack Overflow上的问题可以通过不忽略某些任务来解决。