Ожидание без блокировки потока? - Как?

Это, вероятно, одна из самых элементарных вещей в F#, но я только что понял, что понятия не имею, что происходит за сенсорами.

let testMe() = 
    async { printfn "before!"
            do! myAsyncFunction() // Waits without blocking thread
            printfn "after!" }

testMe |> Async.RunSynchronously

Что происходит в do! myAsyncFunction()? Я знаю, что она ждет завершения myAsyncFunction, прежде чем двигаться дальше. Но как это сделать, не блокируя поток?

Мое лучшее предположение - все, что происходит после do! myAsyncFunction(), передается как продолжение, которое выполняется в том же потоке myAsyncFunction(), в котором было запланировано, как только myAsyncFunction() завершит выполнение... но опять же, это только предположение.

6
задан ebb 12 December 2011 в 16:18
поделиться