Este no es un duplicado de "Cómo llamar de forma segura a un método asíncrono en C # sin esperar" .
¿Cómo suprimo bien la siguiente advertencia?
advertencia CS4014: debido a que no se espera esta llamada, la ejecución del método actual continúa antes de que se complete la llamada. Considere aplicar el operador 'esperar' al resultado de la llamada.
Un simple ejemplo:
static async Task WorkAsync()
{
await Task.Delay(1000);
Console.WriteLine("Done!");
}
static async Task StartWorkAsync()
{
WorkAsync(); // I want fire-and-forget
// more unrelated async/await stuff here, e.g.:
// ...
await Task.Delay(2000);
}
Lo que probé y no me gustó:
static async Task StartWorkAsync()
{
#pragma warning disable 4014
WorkAsync(); // I want fire-and-forget here
#pragma warning restore 4014
// ...
}
static async Task StartWorkAsync()
{
var ignoreMe = WorkAsync(); // I want fire-and-forget here
// ...
}
Actualizado , dado que la respuesta original aceptada ha sido editada, he cambiado la respuesta aceptada a la que usa los descartes de C # 7.0 , ya que no creo que ContinueWith
sea apropiado aquí. Siempre que necesito registrar excepciones para operaciones de disparar y olvidar, utilizo un enfoque más elaborado propuesto por Stephen Cleary aquí .
async void
método auxiliar.
#pragma
que no es agradable?