Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1164 of 1492 menu
◀ ▶

Метод WhenAny

Task.WhenAny возвращает задачу, которая завершится вместе с первой готовой из списка. await даёт победителя - ту же ссылку, что и один из аргументов. Все сразу - WhenAll.

Синтаксис

Task<Task> race = Task.WhenAny(task1, task2); Task<Task<T>> race = Task.WhenAny(t1, t2);

Пример

Давайте сравним готовую задачу и незавершённую:

using System; using System.Threading.Tasks; class Program { static async Task Main() { var pending = new TaskCompletionSource<string>(); var ready = Task.FromResult("abcde"); Task<string> winner = await Task.WhenAny( ready, pending.Task); string res = await winner; Console.WriteLine(res); } }

Результат выполнения кода:

"abcde"

Пример

Давайте проверим, что победитель - та же задача:

using System; using System.Threading.Tasks; class Program { static async Task Main() { var pending = new TaskCompletionSource<int>(); var ready = Task.FromResult(12345); Task<int> winner = await Task.WhenAny( ready, pending.Task); bool res = ReferenceEquals(winner, ready); Console.WriteLine(res); } }

Результат выполнения кода:

True

Пример

Давайте заберём число у первой готовой:

using System; using System.Threading.Tasks; class Program { static async Task Main() { var pending = new TaskCompletionSource<int>(); Task<int> winner = await Task.WhenAny( Task.FromResult(12345), pending.Task); int res = await winner; Console.WriteLine(res); } }

Результат выполнения кода:

12345

Смотрите также

  • метод WhenAll,
    ждать все задачи
  • метод WhenEach,
    обход по мере готовности
  • метод FromResult,
    мгновенно готовая задача
  • Task,
    класс, где объявлен WhenAny
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить