Async.RunSynchronously方法会阻塞吗?

时间:2019-01-22 16:40:01

标签: f#

documentation看来,Async.RunSynchronously运行异步计算并等待其结果。我还读到它类似于C#中的await。我很好奇这是否阻塞线程直到运行完成?

1 个答案:

答案 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类似的当前线程上运行该工作-但是它不会等待)。