Это, вероятно, одна из самых элементарных вещей в F#, но я только что понял, что понятия не имею, что происходит за сенсорами.
let testMe() =
async { printfn "before!"
do! myAsyncFunction() // Waits without blocking thread
printfn "after!" }
testMe |> Async.RunSynchronously
Что происходит в do! myAsyncFunction()
? Я знаю, что она ждет завершения myAsyncFunction
, прежде чем двигаться дальше. Но как это сделать, не блокируя поток?
Мое лучшее предположение - все, что происходит после do! myAsyncFunction()
, передается как продолжение, которое выполняется в том же потоке myAsyncFunction()
, в котором было запланировано, как только myAsyncFunction()
завершит выполнение... но опять же, это только предположение.