Ожидание нескольких задач WhenAll в C#
Несколько независимых операций часто запускают параллельно: загрузка конфигурации, проверка лицензии, чтение кэша. Последовательное ожидание складывает задержки, хотя работа могла идти одновременно.
Метод WhenAll возвращает управление только после завершения каждой задачи из набора. Общее время близко к самой медленной операции, а не к сумме всех пауз.
Смоделируем два расчёта в пуле: паузы 120 и 280 мс идут одновременно:
static Task<int> WarehouseUnits() =>
Task.Run(() =>
{
Thread.Sleep(120);
return 40;
});
static Task<int> ExchangeRateCents() =>
Task.Run(() =>
{
Thread.Sleep(280);
return 55;
});
int[] parts = await Task.WhenAll(WarehouseUnits(), ExchangeRateCents());
Console.WriteLine(parts[0] + parts[1]); // выведет 95
Параллельно посчитайте длины строк "north" и "south" и выведите сумму длин, когда готовы оба результата.