【发布时间】:2019-01-22 16:40:00
【问题描述】:
从documentation 看来,Async.RunSynchronously 运行异步计算并等待其结果。我还读到它类似于 C# 中的 await 。我很好奇这是否会阻塞线程直到它运行完成?
【问题讨论】:
标签: f#
从documentation 看来,Async.RunSynchronously 运行异步计算并等待其结果。我还读到它类似于 C# 中的 await 。我很好奇这是否会阻塞线程直到它运行完成?
【问题讨论】:
标签: f#
是的,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 - 但不会等待)。
【讨论】: