考虑以下定义
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 重写它,但是我将失去将延续传递给内部表达式的能力。