Questo non è un duplicato di "Come chiamare in modo sicuro un metodo asincrono in C # senza attendere" .
Come sopprimo bene il seguente avviso?
avviso CS4014: poiché questa chiamata non è attesa, l'esecuzione del metodo corrente continua prima del completamento della chiamata. Valuta la possibilità di applicare l'operatore "wait" al risultato della chiamata.
Un semplice esempio:
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);
}
Cosa ho provato e non mi è piaciuto:
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
// ...
}
Aggiornato , poiché la risposta originale accettata è stata modificata, ho modificato la risposta accettata a quella usando gli scarti di C # 7.0 , poiché non credo ContinueWith
sia appropriato qui. Ogni volta che ho bisogno di registrare le eccezioni per le operazioni antincendio e dimentico, uso qui un approccio più elaborato proposto da Stephen Cleary .
async void
metodo di supporto.
#pragma
non sia carino?