从documentation看来,Async.RunSynchronously运行异步计算并等待其结果。我还读到它类似于C#中的await。我很好奇这是否阻塞线程直到运行完成?
答案 0 :(得分:9)
是的,Async.RunSynchronously
个块。一个简单的例子:
let work = async {
printfn "Async starting"
do! Async.Sleep(1000)
printfn "Async done" }
printfn "Main starting"
work |> Async.RunSynchronously
printfn "Main done"
这将打印:
Main starting
Async starting
Async done
Main done
它与C#中的task.RunSynchronously
大致相似-尽管可能存在一些细微的差异(F#工作流将在主线程被阻塞时使用线程池执行,并等待完成,而C#等效项可能会实际上在与F#中的StartImmediate
类似的当前线程上运行该工作-但是它不会等待)。