он не завершится за n секунд, то выбрасываем исключение.
ты можешь выбросить ожидающему такой таск исключение чтобы он не ждал больше, но отменить таск будет сложнее
У меня коллекция тасков, если пара из них не выполнится то и хрен с ними, я только хочу ограничить время выполнения каждого из них, ожидаю завершение тасков с помощью Task.WhenAll
Но ожидаю я то все сразу таски, их количество меняется от раза к разу, можно отвести условно 5 секунд на один и посчитать ожидание для Task.WhenAll, но это не совсем правильно будет
ну вот чот такое смастери open System.Threading.Tasks open System let runAllWithTimeout (timeout: TimeSpan) (tasks: Task<_>[]) = task { let waitMax = Task.Delay timeout let runAll = Task.WhenAll tasks let! waitMaxOrRunAll = Task.WhenAny(waitMax, runAll) return if waitMaxOrRunAll = waitMax then failwith "Timeout" else runAll.Result }
Спасибо, я думал может что то встроенное есть в шарп, но видимо буду использовать что то такое Task.WhenAny(Task.WhenAll(tasks), Task.Delay(timeout));
Я как-то раз делал канселяцию неканселируемого по best practice, посмотри тут. Там даже ссылка на статью от Тауба, вроде.
Обсуждают сегодня