当我使用 async{} 计算表达式运行该代码块时:
let tokenSource = new CancellationTokenSource()
let runAsync() =
async {
while true do
do! Async.Sleep(1000 * 1)
printfn "hello"
}
Async.Start(runAsync(), tokenSource.Token)
如果运行tokenSource.Cancel()
,执行过程将按预期被取消。
然而,当我使用task{}运行这个非常类似的代码块时:
let tokenSource = new CancellationTokenSource()
let rec runTask() =
task {
while true do
do! Task.Delay(1000 * 1)
printfn "hello"
}
let run () = runTask () :> Task
Task.Run(run, tokenSource.Token)
如果运行 tokenSource.Cancel()
,执行过程不会被取消。
为什么对于async{}的取消令牌可以按预期工作,但对于task{}则不能?