¿Qué significa suspender la función en Kotlin Coroutine?
Estoy leyendo Kotlin Coroutine y sé que se basa ensuspend
función. Pero que hacesuspend
¿media?
Corutina o función se suspende?
Dehttps://kotlinlang.org/docs/reference/coroutines.html
Básicamente, las corutinas son cálculos que pueden suspenderse sin bloquear un hilo
Escuché que la gente a menudo dice "suspender la función". ¿Pero creo que es la corutina la que se suspende porque está esperando que termine la función? "suspender" generalmente significa "cesar la operación", en este caso la rutina está inactiva.
¿Deberíamos decir que la corutina está suspendida?
¿Qué corutina se suspende?
Dehttps://kotlinlang.org/docs/reference/coroutines.html
Para continuar con la analogía, await () puede ser una función de suspensión (por lo tanto, también se puede llamar desde un bloque asíncrono {}) que suspende una rutina hasta que se realiza algún cálculo y devuelve su resultado:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
Dice "que suspende una rutina hasta que se realiza algún cálculo", pero la rutina es como un hilo ligero. Entonces, si la rutina se suspende, ¿cómo se puede hacer el cálculo?
Vemosawait
se llamacomputation
, entonces podría serasync
eso vuelveDeferred
, lo que significa que puede comenzar otra rutina
fun computation(): Deferred<Boolean> {
return async {
true
}
}
La cita diceque suspende una corutina. Significasuspend
el exteriorasync
corutina osuspend
el interiorcomputation
corutina?
Hacesuspend
significa que si bien exteriorasync
la corutina está esperandoawait
) para el interiorcomputation
corutina para terminarla (el exteriorasync
corutina) está inactiva (de ahí el nombre suspendido) y devuelve el subproceso al grupo de subprocesos, y cuando el elemento secundariocomputation
la rutina la termina (el exteriorasync
corutina) se despierta, toma otro hilo de la piscina y continúa?
La razón por la que menciono el hilo es porhttps://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
El hilo se devuelve a la agrupación mientras la rutina está esperando, y cuando la espera termina, la rutina se reanuda en una secuencia libre en la agrupación