Utilizzare WhenEach per processare i risultati di una lista di task

di Stefano Mostarda, in .NET Framework,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi