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
Mischiare codice server side e client side in una query LINQ con Entity Framework
Configurare OpenAI in .NET Aspire
Supportare la sessione affinity di Azure App Service con Application Gateway
Configurare automaticamente un webhook in Azure DevOps
Definire il colore di una scrollbar HTML tramite CSS
Usare la libreria PredicateBuilder per eseguire query tramite Entity Framework che usano or su più campi
Eliminare record doppi in Sql Server
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Definire il metodo di rilascio in .NET Aspire
Integrare LLM alle nostre applicazioni in .NET con MCP
Ottimizzare le performance usando Span<T> e il metodo Split
.NET Aspire per applicazioni distribuite
I più letti di oggi
- Effettuare il multi-checkout in linea nelle pipeline di Azure DevOps
- Sfruttare una CDN con i bundle di ASP.NET
- Alleggerire le applicazioni WPF sfruttando gli oggetti Freezable
- Le DirectInk API nella Universal Windows Platform
- Gli oggetti CallOut di Expression Blend 4.0
- Effetto turnstile su tutte le pagine con il Windows Phone Toolkit
- Esaminare documenti XML con namespace utilizzando LINQ to XML
- Inserire le news di Punto Informatico nel proprio sito


