Для двух задач используйте await Task.WhenAll. В .NET 6+ ожидание можно ограничить через WaitAsync(timeout), но истечение таймаута само по себе не отменяет исходные операции.
Как дождаться завершения двух асинхронных операций? Можно ли задать 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.