async / await – La comprensione è corretta?

Dopo due domande e molta confusione – mi chiedo se finalmente ho capito bene. Questa è la mia comprensione:

async/await serve solo uno scopo : consentire l’esecuzione del codice dopo che è stato completato un task già asincrono. per esempio

 async Task CallerMethod() { await AsyncMethod(); AnotherMethod(); } 

consente a AnotherMethod di essere eseguito dopo che AsyncMethod asincrono è terminato anziché immediatamente dopo l’ AsyncMethod .

async / await MAI rende nulla asincrono. Non inizia un thread separato (a meno che il metodo atteso lo faccia comunque, ovviamente), ecc.

La mia comprensione (finalmente) è corretta?

Sebbene la risposta di Stephen sia corretta, voglio assicurarmi di avere qualche punto in più chiaro.

async / await MAI rende nulla asincrono

Rende CallerMethod un metodo asincrono. CallerMethod restituisce un’attività che può essere a sua volta attesa e CallerMethod restituisce tale attività prima che il lavoro di CallerMethod sia completo, quindi è un metodo asincrono.

Non rende AsyncMethod asincrono; era già asincrono.

Non inizia una discussione separata

Destra. Questa è una fonte frequente di confusione. I thread sono un’unità di concorrenza, che è solo un tipo di asincronia. Di solito un’analogia aiuta. Puoi mettere il pane nel tostapane, aspettare che tocchi e quindi fare le uova. Puoi mettere il pane nel tostapane, cuocere le uova mentre il toast sta tostando e poi affrontare il brindisi dopo che le uova sono state fatte. Oppure puoi assumere due cuochi, uno per cucinare le uova e l’altro per fare il pane tostato. Il primo è l’elaborazione sincrona. Il secondo e il terzo sono asincroni, ma solo il terzo è simultaneo. Si noti che la terza soluzione è la più costosa; i fili sono lavoratori e i lavoratori non sono economici.

Ciò che rende asincrono un metodo asincrono non è che sia simultaneo, anche se potrebbe esserlo. Ciò che lo rende asincrono è che ti dà un meccanismo che ti permette di fare qualcos’altro mentre aspetti che il suo lavoro sia completato . await è solo un modo piacevole per scrivere “ecco il codice che voglio che venga eseguito dopo che l’attività è stata completata con successo”.

async / await MAI rende nulla asincrono. Non inizia un thread separato (a meno che il metodo atteso lo faccia comunque, ovviamente), ecc.

Sì.

In altre async , async / await consente di scrivere codice da una prospettiva asincrona. In altre parole, il codice può “attendere in modo asincrono” ( await ) le operazioni da completare e, a sua volta, definire la propria operazione asincrona (l’attività restituita da un metodo async , che rappresenta l’esecuzione di tale metodo).