Task.WhenAll - Come ottenere risultati da await multipli

La scorsa settimana, dopo avere scritto la prima versione del pacchetto Nuget SwitchyLinkGenerator ho guardato i tempi ed ho deciso di ottimizzare la parte critica.
- Situazione: La chiamata verso la loro API impiega circa 2 secondi per tornare il link
- Partenza: Avevo da fare circa 6 chiamate. In maniera sequenziale voleva dire buttare via circa 12 secondi
- Modifica: Ottimizzazione del codice sfruttando Task.WhenAll
In questo articolo non verra’ spiegato nulla per quanto riguarda la TAP (Task Asynchronous Programming). Se avete dubbi in merito vi rimando all’articolo scritto lo scorso anno “HttpClient GetAsync - Asynchronous Coding & Performance –> Effettua chiamate HttpClient in Asynchronous (async/await) per ottimizzare il tuo codice”
Prerequisiti
Ora -senza perdere molto altro tempo in parole- vediamo di passare al codice. Meglio, vero?
Facciamo mente locale, cosa mi serve?
- Un DTO per i risultati
- Un “raccoglitore” di Task
- N chiamate async da fare
- Un “raccoglitore” di Result
Ora che abbiamo tutto quanto possiamo cominciare. Pronti?
DTO
|
|
List - Task
|
|
foreach / async
|
|
List - Result
|
|
Task.WhenAll & Result
Dopo avere preparato il campo coi precedenti prerequisiti dobbiamo affrontare la parte fondamentale di questo tutorial.
come aspetto i task per ottenere i risultati?
Nulla di piu’ semplice! Pronto?
Task WhenAll
Dopo avere scritto il foreach / async abbiamo la necessita’ di inserire -finalmente- il tanto atteso Task WhenAll
|
|
await result
|
|
Source Code
Dopo avere visto il codice sorgente spezzettato per capirlo al meglio, eccolo scritto tutto assieme direttamente dalla mia classe.
|
|
Task WhenAll
Prima di chiudere, ecco per voi la definizione di Task.WhenAll direttamente dalla classe Task presente nel namespace System.Threading.Tasks:
|
|