Как дождаться завершения двух асинхронных операций? Можно ли задать timeout ожидания?

Для двух задач используйте await Task.WhenAll. В .NET 6+ ожидание можно ограничить через WaitAsync(timeout), но истечение таймаута само по себе не отменяет исходные операции.

Короткий ответ

Что ответить на собеседовании

Для двух задач используйте await Task.WhenAll. В .NET 6+ ожидание можно ограничить через WaitAsync(timeout), но истечение таймаута само по себе не отменяет исходные операции.

Подробный разбор

Ответ с пояснениями

Для двух задач используйте await Task.WhenAll. В .NET 6+ ожидание можно ограничить через WaitAsync(timeout), но истечение таймаута само по себе не отменяет исходные операции.

Task all = Task.WhenAll(first, second);
await all.WaitAsync(TimeSpan.FromSeconds(5));

Задачи должны быть созданы до WhenAll, иначе последовательные await могут не дать конкурентного выполнения. WhenAll завершится после завершения обеих задач; ошибки сохраняются в общей задаче.

Если нужна остановка операций, передайте им CancellationToken от CancellationTokenSource с CancelAfter. Отмена кооперативная: её должны поддерживать сами операции. После таймаута учитывайте их дальнейшее завершение и ошибки, не теряйте владение ресурсами.

Источник: learn.microsoft.com.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее