Pourquoi devrais-je préfère unique 'attendent Tâche.WhenAll " sur plusieurs attend?

Dans le cas où je ne se soucient pas de l'ordre de l'achèvement de la tâche et juste besoin de toutes pour terminer, dois-je toujours utiliser await Task.WhenAll au lieu de plusieurs await? e.g, est DoWork2 ci-dessous une méthode préférée pour DoWork1 (et pourquoi?):

using System;
using System.Threading.Tasks;
namespace ConsoleApp
{
class Program
{
static async Task<string> DoTaskAsync(string name, int timeout)
{
var start = DateTime.Now;
Console.WriteLine("Enter {0}, {1}", name, timeout);
await Task.Delay(timeout);
Console.WriteLine("Exit {0}, {1}", name, (DateTime.Now - start).TotalMilliseconds);
return name;
}
static async Task DoWork1()
{
var t1 = DoTaskAsync("t1.1", 3000);
var t2 = DoTaskAsync("t1.2", 2000);
var t3 = DoTaskAsync("t1.3", 1000);
await t1; await t2; await t3;
Console.WriteLine("DoWork1 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}
static async Task DoWork2()
{
var t1 = DoTaskAsync("t2.1", 3000);
var t2 = DoTaskAsync("t2.2", 2000);
var t3 = DoTaskAsync("t2.3", 1000);
await Task.WhenAll(t1, t2, t3);
Console.WriteLine("DoWork2 results: {0}", String.Join(", ", t1.Result, t2.Result, t3.Result));
}
static void Main(string[] args)
{
Task.WhenAll(DoWork1(), DoWork2()).Wait();
}
}
}
  • Que faire si vous ne savez pas vraiment comment beaucoup de tâches que vous devez faire en parallèle? Que faire si vous avez 1000 de tâches à exécuter? Le premier va pas être très lisible await t1; await t2; ....; await tn => le second est toujours le meilleur choix dans les deux cas
  • Votre commentaire a du sens. J'essayais juste clarifier quelque chose pour moi-même, liée à une autre question, j'ai récemment answered. Dans ce cas, il y avait 3 tâches.
InformationsquelleAutor avo | 2013-08-19