Visual Studio emette un avviso per questo codice ('poiché questa chiamata non è attesa, l'esecuzione del metodo corrente continua prima che la chiamata sia completata').È corretto dichiarare un metodo asincrono come invalido per disattivare l'avviso CS4014?
static void Main(string[] args)
{
FireAndForget(); // <-- Warning CS4014
// Do something else.
}
static async Task FireAndForget()
{
// Do something (cannot throw).
}
La mia comprensione è che è OK di non aspettare per il compito in questo caso particolare, perché non sarà mai FireAndForget un'eccezione.
Invece di disattivare l'avviso con un pragma, stavo considerando di cambiare il tipo di ritorno di FireAndForget da Task a void. Questo attenua efficacemente il compilatore.
static async void FireAndForget() // <-- Task changed to void
{
// Do something (cannot throw).
}
Tuttavia, secondo Stephen Cleary, metodi di 'vuoto' asincrone dovrebbero essere evitati, quindi non sono del tutto sicuri di cosa fare.
È corretto avere un metodo "async void" se il metodo non è progettato per essere attendibile in primo luogo e se non verrà lanciata alcuna eccezione?
* il metodo non è progettato per essere attendibile in primo luogo * Che cosa significa? Cosa fa effettivamente "FireAndForget"? –
Perché diamine è stato questo downvoted + votato per la chiusura? – ken2k
@ ken2k Non ho votato per chiudere ma posso vedere dove questo sarebbe visto come una domanda basata sull'opinione senza una risposta obiettivamente corretta. Forse "Va bene" potrebbe essere riformulato in "Quali sono i vantaggi e gli svantaggi". – pseudocoder