O que significa função de suspensão na Kotlin Coroutine
Estou lendo Kotlin Coroutine e sei que é baseado emsuspend
função. Mas o que fazsuspend
significar?
A rotina ou a função são suspensas?
Dehttps://kotlinlang.org/docs/reference/coroutines.html
Basicamente, as corotinas são cálculos que podem ser suspensos sem bloquear um encadeamento
Ouvi pessoas dizerem "suspender a função". Mas acho que é a corotina que fica suspensa porque aguarda o término da função? "suspender" geralmente significa "cessar operação"; nesse caso, a corotina está ociosa.
Devemos dizer que a corotina está suspensa?
Qual rotina é suspensa?
Dehttps://kotlinlang.org/docs/reference/coroutines.html
Para continuar a analogia, waitit () pode ser uma função de suspensão (portanto, também pode ser chamada de dentro de um bloco assíncrono {}) que suspende uma corotina até que algum cálculo seja feito e retorne seu resultado:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
Ele diz "que suspende uma corotina até que algum cálculo seja feito", mas a corotina é como um fio leve. Portanto, se a corotina estiver suspensa, como o cálculo pode ser feito?
Nós vemosawait
é chamadocomputation
, então pode serasync
que retornaDeferred
, o que significa que ele pode iniciar outra corotina
fun computation(): Deferred<Boolean> {
return async {
true
}
}
A citação dizque suspende uma corotina. Quer dizersuspend
o exteriorasync
corotina oususpend
o interiorcomputation
corotina?
Fazsuspend
significa que enquanto exteriorasync
a rotina está esperando (await
) para o interiorcomputation
rotina terminar, ele (a parte externaasync
coroutine) ocioso (daí o nome suspender) e retorna o encadeamento para o conjunto de encadeamentos e quando o filhocomputation
terminada com a corotina,async
acorda, pega outro fio da piscina e continua?
A razão de eu mencionar a discussão é por causa dehttps://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
O encadeamento é retornado ao pool enquanto a corotina está aguardando e, quando a espera é concluída, a corotina continua em um encadeamento livre no pool