【发布时间】:2011-12-12 16:08:27
【问题描述】:
这可能是 F# 中最基本的东西之一,但我刚刚意识到我不知道幕后发生了什么。
let testMe() =
async { printfn "before!"
do! myAsyncFunction() // Waits without blocking thread
printfn "after!" }
testMe |> Async.RunSynchronously
do! myAsyncFunction() 发生了什么?我知道它会等待myAsyncFunction 完成,然后再继续。但是它怎么能做到这一点,而不阻塞线程呢?
我最好的猜测是,do! myAsyncFunction() 之后的所有内容都作为延续传递,一旦myAsyncFunction() 完成执行,就会在同一线程上执行myAsyncFunction()。但话又说回来,这只是一个猜测。
【问题讨论】:
-
你的猜测是对的,虽然我认为延续会在线程池中的下一个可用线程上运行,不一定是同一个线程。
标签: multithreading f#