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
Creare un indice su una colonna JSON in SQL Server
Abilitare .NET 10 su Azure App Service e Azure Functions
Utilizzare i command service nei test con .NET Aspire
Arricchire l'interfaccia di .NET Aspire
Microsoft Fabric: la piattaforma unificata per l'ecosistema dati moderno
Abilitare il rolling update su Azure Functions flex consumption
Utilizzare le direttive più importanti in una file based app .NET
Esporre tool MCP con Azure Functions
Escludere alcuni file da GitHub Copilot
Utilizzare le librerie native di .NET per decomprimere un file zip
Pubblicare un MCP Server in GitHub MCP Registry
Dallo sviluppo locale ad Azure con .NET Aspire


