Quais são as principais classes em Kotlin Coroutines?
sobes.tech IA
Resposta da IA
Classes e conceitos principais em Kotlin Coroutines:
-
CoroutineScope: Define o ciclo de vida das coroutines lançadas dentro dele. Permite cancelar todas as coroutines filhas. -
Job: Representa uma referência a uma coroutine. Permite rastrear seu estado, aguardar sua conclusão, cancelá-la. -
Deferred: Um tipo especial deJobque representa um valor que estará disponível posteriormente. Usado para cálculos assíncronos que retornam um resultado. O resultado pode ser obtido com a função.await(). -
Dispatcher: Define a thread ou pool de threads onde a coroutine é executada. Os principais despachantes:Dispatchers.Default: Otimizado para tarefas intensivas de CPU. Usa um pool de threads compartilhado.Dispatchers.IO: Otimizado para operações de I/O (rede, disco). Usa uma quantidade adequada de threads.Dispatchers.Main: A thread principal de UI. Para atualizar a UI. Disponível em plataformas Android e outras com a dependência adequada.Dispatchers.Unconfined: Executa a coroutine na thread atual, mas a recomeça em qualquer thread que recomece a função suspending.
-
Suspending function: Função marcada com a palavra-chavesuspendque pode ser suspensa e retomada posteriormente. Pode chamar outras funções suspending. -
runBlocking: Bloqueia a thread atual até que todas as coroutines em seu escopo tenham terminado. Usado principalmente para testes e na função main. -
launch: Inicia uma nova coroutine sem bloquear a thread atual e retorna umJob. -
async: Inicia uma nova coroutine sem bloquear a thread atual e retorna umDeferred.
Exemplo de uso:
// Exemplo de uso de CoroutineScope, launch e Dispatchers.IO
import kotlinx.coroutines.*
fun main() = runBlocking {
// Criação de CoroutineScope
val scope = CoroutineScope(Dispatchers.IO)
// Lançar uma coroutine no dispatcher IO
val job: Job = scope.launch {
// Realizar uma requisição de rede ou outra operação de I/O
delay(1000) // Simulação de trabalho
println("Coroutine terminada em ${Thread.currentThread().name}")
}
// Aguardar a conclusão da coroutine
job.join()
println("Função main terminada")
}
// Exemplo de uso de async e Deferred
import kotlinx.coroutines.*
fun main() = runBlocking {
val deferredSum: Deferred<Int> = async {
delay(500)
1 + 1
}
// Aguardar o resultado
val result = deferredSum.await()
println("Resultado é: $result")
}