Esta es probablemente una de las cosas más elementales en F #, pero me acabo de dar cuenta de que no tengo idea de lo que sucede detrás de los escenarios.¿Espera sin bloquear el hilo? - ¿Cómo?
let testMe() =
async { printfn "before!"
do! myAsyncFunction() // Waits without blocking thread
printfn "after!" }
testMe |> Async.RunSynchronously
¿Qué está pasando en do! myAsyncFunction()
? Soy consciente de que espera a que termine myAsyncFunction
, antes de continuar. Pero, ¿cómo puede hacer eso, sin bloquear el hilo?
Mi mejor conjetura es que todo lo que después se pasa a lo largo de do! myAsyncFunction()
como una continuación, que es ejecutado en el mismo subproceso myAsyncFunction()
estaba previsto, una vez que ha finalizado la ejecución myAsyncFunction()
.. pero, de nuevo, eso es sólo una conjetura.
Su suposición es correcta, aunque creo que la continuación se llevará a cabo en el siguiente hilo disponible en el grupo de subprocesos, no necesariamente el mismo hilo. – Daniel