Evitare l'utilizzo non necessario di async/await in C#

di Stefano Mostarda, in .NET Framework,

L'introduzione di async/await in .NET ha permesso di creare applicazioni estremamente più performanti rispetto al passato senza dover stravolgere il nostro modo di scrivere codice. Tuttavia l'utilizzo di questa sintassi non è del tutto trasparente e spesso nasconde insidie se non la si utilizza nel modo corretto. Una delle caratteristiche nascoste dell'async/await è di generare il codice per una macchina a stati ogni volta che si usa la sintassi. Questo fa si che il codice generato sia lievemente più pesante rispetto al codice che non usa async/await. Esistono però die casi in cui possiamo usare i Task, ma senza usare async/await. Prendiamo come esempio il seguente codice.

public async Task ExternalMethod(string par)
{
   ArgumentNullException.ThrowIfNullOrWhiteSpace(par);
   await InnerMethod();
}

public async Task InnerMethod() 
{
  //esegue codice asincrono
}

In questo esempio il compilatore crea due macchine a stati: una per la chiamata a InnerMethod e una per il codice dentro InnerMethod (presupponendo che al suo intero usiamo await). Tuttavia, ExternalMethod non esegue altro codice dopo la chiamata a InnerMethod. Per questo motivo possiamo evitare di usare await e tornare direttamente il Task restituito da InnerMethod, sarà compito di qualcosa al di sopra di ExternalMethod fare l'await del Task. possiamo quidni riscrivere il codice così.

public Task ExternalMethod(string par)
{
   ArgumentNullException.ThrowIfNullOrWhiteSpace(par);
   return InnerMethod();
}

public async Task InnerMethod() 
{
  //esegue codice asincrono
}

In questo caso abbiamo tolto async/await da ExternalMethod eliminando una macchian a stati dal compilato. Va sottolineato che ovviamente questa tecnica può essere usata solo se dopo la chiamata a InnerMethod non deve essere eseguito alcun codice, altrimenti sarebbe obbligatorio usare async/await

Commenti

Visualizza/aggiungi commenti

| Condividi su: LinkedIn, Facebook

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata

I più letti di oggi