È quasi sempre I/O.
Naturalmente le operazioni asincrone sono operazioni che non richiedono la CPU, ad esempio l'invio di dati tramite la rete o la lettura di dati dal disco rigido. Non richiedono alcun calcolo, quindi la CPU può eseguire altre attività mentre sono in esecuzione.
Ci sono anche operazioni logiche che non richiedono un filo, ad esempio in attesa di un timeout di scadenza, o aspettare su costrutti di sincronizzazione (es AsyncLock
)
operazioni che vengono asincrono ma non naturalmente asincrono sono operazioni CPU in esecuzione su un thread in background. Questi sono utili per la reattività (ad es. Per le app UI) ma non migliorano le prestazioni o la scalabilità poiché richiedono ancora la stessa quantità di risorse.
In modo da avere:
operazioni Naturalmente asincrone in esecuzione in modo asincrono:
await Task.Delay(1000);
operazioni Naturalmente asincrone in esecuzione in modo sincrono:
Thread.Sleep(1000);
operazioni Naturalmente sincrone in esecuzione in modo asincrono:
await Task.Run(() => CalculateSquareRoot(5));
operazioni Naturalmente sincrone in esecuzione in modo sincrono:
CalculateSquareRoot(5);
tutto fatto attraverso la rete - chiamate al database, HTTP, prese, ecc D'altra parte - operazioni di CPU bound, di solito calcoli di qualche tipo. –