【问题标题】:Does Async.RunSynchronously method block?Async.RunSynchronously 方法是否阻塞?
【发布时间】:2019-01-22 16:40:00
【问题描述】:

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

【问题讨论】:

    标签: f#


    【解决方案1】:

    是的,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 - 但不会等待)。

    【讨论】:

      猜你喜欢
      • 2013-08-17
      • 2015-04-25
      • 2020-09-16
      • 2011-04-09
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多