Sobes.tech
Junior — Middle

Como é que a execução de coroutines é parada e suspensa em aplicações assíncronas?

sobes.tech IA

Resposta da IA

Em Kotlin, as corrotinas são geridas através de objetos Job e CoroutineScope. Para pausar e parar as corrotinas, utilizam-se os seguintes mecanismos:

  • Pausa — as corrotinas podem ser pausadas usando a palavra-chave suspend e funções que pausam a sua execução (por exemplo, delay()). Isto não bloqueia a thread, mas a corrotina retoma mais tarde.

  • Cancelamento (paragem) — as corrotinas podem ser canceladas chamando o método cancel() no seu Job. Ao cancelar, a corrotina recebe uma exceção CancellationException e deve terminar corretamente.

Exemplo de cancelamento de uma corrotina:

val job = CoroutineScope(Dispatchers.Default).launch {
    repeat(1000) { i ->
        println("A trabalhar $i ...")
        delay(500)
    }
}

// Parar a corrotina após 2 segundos
CoroutineScope(Dispatchers.Default).launch {
    delay(2000)
    job.cancel()
    println("Corrotina cancelada")
}

Assim, a pausa é uma parte natural do trabalho das corrotinas, e a paragem é a sua cancelamento através de Job.