如何防止某些功能的“考虑应用'await'运算符...”警告?

时间:2018-08-26 23:49:20

标签: c# async-await

如果我有一个可以等待 的方法,但通常不是,我该如何防止不存在该方法的警告?在每个调用站点上附加#pragmas来抑制,这更加令人讨厌,并且我不想全局禁用警告,因为确实应该等待许多Task返回函数;它只是我想说的一小部分子集,“即使可以,但此函数不会期望为awaited,因此请不要警告是否在没有await的情况下调用它”。

1 个答案:

答案 0 :(得分:0)

您似乎想开除并忘记某些任务。

我写了一个扩展方法,如:

root

现在,您可以通过

将任务标记为“一劳永逸”
public static class TaskExtensions
{
  public void FireAndForget(this Task task)
  {
    // access exception (and ideally log it) to avoid a potential exception being rethrown by the finalizer as an unobserved exception
    task.ContinueWith(t => Debug.WriteLine(t.Exception), TaskContinuationOptions.OnlyOnFaulted);
  }
}

并且编译器不会抱怨,因为没有等待任务,并且似乎不会发生UnobservedTaskException异常,因为只要GC的终结器线程决定释放任务,它们就会被重新抛出,从而使它们看起来有些不稳定。