Async.RunSynchronously方法阻塞吗?

use*_*180 2 f#

从文档中可以看出Async.RunSynchronously运行异步计算并等待其结果.我也读到它与C#中的等待类似.我很好奇,如果它阻止线程直到它运行完成?

Tom*_*cek 11

是的,Async.RunSynchronously块.一个简单的例子:

let work = async {
  printfn "Async starting"
  do! Async.Sleep(1000)
  printfn "Async done" }

printfn "Main starting"
work |> Async.RunSynchronously
printfn "Main done"
Run Code Online (Sandbox Code Playgroud)

这将打印:

Main starting
Async starting
Async done
Main done
Run Code Online (Sandbox Code Playgroud)

它大致类似于task.RunSynchronouslyC# - 尽管可能存在一些细微差别(F#工作流将使用线程池执行,而主线程被阻塞并等待完成,而C#等效可能实际上在当前线程上运行工作这更类似于StartImmediateF# - 然而它不等待).