Метод WhenAll
Task.WhenAll для
Task<T> даёт массив
результатов в том же порядке, что и
аргументы. Первую готовую ловят через
WhenAny,
по мере готовности -
WhenEach
в .NET 9.
Синтаксис
await Task.WhenAll(task1, task2);
int[] values = await Task.WhenAll(t1, t2);
Пример
Давайте сложим два готовых результата:
using System;
using System.Linq;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int[] parts = await Task.WhenAll(
Task.FromResult(1),
Task.FromResult(2));
int res = parts.Sum();
Console.WriteLine(res);
}
}
Результат выполнения кода:
3
Пример
Давайте проверим порядок в массиве:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
int[] parts = await Task.WhenAll(
Task.FromResult(1),
Task.FromResult(2));
bool res = parts[0] == 1 && parts[1] == 2;
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте дождёмся двух строк:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
string[] parts = await Task.WhenAll(
Task.FromResult("abcde"),
Task.FromResult("12345"));
string res = parts[0] + parts[1];
Console.WriteLine(res);
}
}
Результат выполнения кода:
"abcde12345"
Смотрите также
-
метод
WhenAny,
первая завершившаяся -
метод
WhenEach,
перечисление по готовности -
метод
FromResult,
готовая задача для набора -
Task,
класс, где объявленWhenAll