此代码会导致异常丢失。
而不是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();
}
答案 0 :(得分:2)
我不知道提供此警告的工具,但Resharper是可扩展的。他们最近开源了一个扩展代码,用于标记源代码中的所有分配。编写扩展名似乎并不难。它将触发返回Task
的所有方法调用,并且不会立即以任何方式使用调用结果。
但是,如果方法返回在其他位置轮询错误信息的任务,则可能会遇到误报。不过,这是一个有用的警告。我经常看到Stack Overflow上的问题可以通过不忽略某些任务来解决。