Quando abbiamo un array di task e vogliamo andare avanti solo quando l'esecuzione di tutti i task è terminata, WhenAll è sicuramente il metodo più semplice. Il problema di WhenAll è che restituisce il controllo solamente quando tutti i task sono completati. Sebbene questo meccanismo sia comodo e semplice, non è affatto ottimizzato in quanto i risultati vengono processati tutti insieme alla fine.
Un modo per ottimizzare il codice è quello di processare il risultato dei vari task man mano che questi si completano senza aspettare l'ultimo come accade con WhenAll. Il metodo WhenEach abilita questa ottimizzazione e ci permette quindi di scrivere codice più performante in associazione con la sintassi await foreach.
var http = new HttpClient(); var linq = http.GetStringAsync("http://linqitalia.it"); var asp = http.GetStringAsync("http://aspitalia.com"); var html5 = http.GetStringAsync("http://html5italia.com"); await foreach (var t in Task.WhenEach(linq, asp, html5)) { Console.WriteLine(t.Result); }
Grazie al costrutto await foreach ogni volta che un task viene completato il codice nel ciclo viene eseguito per quel task e quando tutti i task sono completati il ciclo si esaurisce.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Miglioramenti nell'accessibilità con Angular CDK
Ottimizzare le performance usando Span<T> e il metodo Split
Gestione CSS in Blazor con .NET 9
Ordine e importanza per @layer in CSS
Scrivere selettori CSS più semplici ed efficienti con :is()
Gestione dei nomi con le regole @layer in CSS
Creare una libreria CSS universale - Rotazione degli elementi
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Inference di dati strutturati da testo con Semantic Kernel e ASP.NET Core Web API
Creare una libreria CSS universale: Clip-path
Ottimizzazione dei block template in Angular 17
Utilizzare il trigger SQL con le Azure Function