Рассмотрим следующее определение
let test =
Async.FromContinuations(
fun (cont,econt,ccont) ->
let rec inner () =
async {
do printfn "looping..."
do! Async.Sleep 1000
return! inner ()
}
Async.Start(inner ())
cont ())
Предположим, я хочу попробовать вычислить так
let cts = new CancellationTokenSource ()
Async.Start(test, cts.Token)
cts.Cancel()
Это, естественно, не остановит внутренний цикл, поскольку я не передал подходящий токен отмены. Можно ли каким-либо образом получить токен внешней отмены через Async.FromContinuations? Я мог бы переписать это, используя асинхронный построитель и Async.CancellationToken, но тогда я потерял бы возможность передавать продолжения внутреннему выражению.