Блокирует ли метод Async.RunSynchronously? - PullRequest
0 голосов
/ 22 января 2019

Из документации видно, что Async.RunSynchronically выполняет асинхронное вычисление и ожидает его результата.Я также читал, что это похоже на ожидание в C #.Мне интересно, блокирует ли это поток до тех пор, пока он не будет завершен?

1 Ответ

0 голосов
/ 23 января 2019

Да, 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 # - что, впрочем, не ждет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...