从文档中可以看出,Async.RunSyncly运行异步计算并等待其结果。我还读到它类似于 C# 中的 await。我很好奇这是否会阻塞线程直到它运行完成?
是的,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
- 但它不会等待)。