Да, 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
Это примерно похоже на task.RunSynchronously
в C # - хотя могут быть некоторые тонкие различия (рабочий процесс F # будет выполняться с использованием пула потоков, в то время как основной поток заблокирован и ожидает завершения, в то время как эквивалент C # может фактически выполняться работа над текущим потоком, которая больше похожа на StartImmediate
в F # - что, впрочем, не ждет).