Quindi ho lavorato con l'elaborazione in background e i sistemi event-driven, ovvero Azure WebJobs e ServiceBus. E mentre c'è un uso estensivo della programmazione di async/await
, mi chiedo sempre se è generalmente una cattiva pratica a await
operazioni asincrone quando non ha affatto bisogno dei risultati ulteriormente nel programma. Più simile a un fuoco e dimenticare.
So che await
non bloccherà un thread ma perché forzare la CPU a ritornare al tuo metodo dopo await
se non succede nulla o non hai bisogno del risultato del metodo. Perché non si dovrebbe saltare solo await
sulla propria operazione, la CPU non ha mai bisogno di ritornare al proprio metodo e il thread può essere restituito al pool. Questa situazione è incendiaria e dimentica.
EDIT: esempi di codice
async Task WriteEvent(string event)
{
//some logic
Event parsedEvent = new Event(event);
//other logic
_eventService.WriteEventAsync(parsedEvent); // no await
}
L'alternativa al blocco di codice precedente:
async Task WriteEvent(string event)
{
//some logic
Event parsedEvent = new Event(event);
//other logic
await _eventService.WriteEventAsync(parsedEvent); // await
}