У меня есть вычисление Async<'T>
, которое я хочу выполнить, и получаю результат 'T
.
У меня только два требования:
- После определенного
timeout:TimeSpan
прошло, я хочу, чтобы вычисление / ввод-вывод было прервано. - Я хочу запустить его с
cancellationToken
на всякий случай, если я хочу прервать его до того, как пройдет timeout
.
Согласно моему требованию (1) выше, вы можете подумать, что Async.StartChild
является хорошим кандидатом, поскольку он принимает параметр timeout, однако он не принимает параметр cancellationToken!
Кажется, чтодругие Async.
методы в API, которые принимают cancellationToken, либо не возвращают ничего (поэтому я не могу дождаться результата), либо работают только для Async<unit>
, либо не позволяют мне комбинировать его с Async..StartChild для выполнения обоих моих требований.
Кроме того, мне нужно реализовать это внутри блока async{}
, что означает использование Async.RunSynchronously
внутри него (на случай, если вы предложите это ) будет выглядеть проблематично или некрасиво.
Я что-то пропускаю?
Спасибо!