Introdução à corrotina em Kotlin
Uma Coroutine é um thread leve de execução que pode ser suspenso e retomado posteriormente. Já existem muitos artigos ou tópicos abordando isso, mas este post é diferente, é simples e permite que você comece com mais facilidade. Ele cobrirá as seguintes partes:
Visão geral
Como muitas outras linguagens de programação, como JS, Python, Coroutine é um recurso fornecido pelo Kotlin que nos permite executar tarefas longas e demoradas. Resumidamente:
Em Kotlin, Coroutines são uma maneira de escrever código assíncrono e sem bloqueio de uma maneira mais sequencial e fácil de ler.
Na verdade, nada de novas técnicas aqui. Podemos tratar Kotlin Coroutine como uma estrutura/biblioteca que encapsula alguns usos comuns enquanto lida com a assincronização.
Exemplos simples de uso de corrotinas em Kotlin
Para usar corrotinas em Kotlin, você precisa incluir a kotlinx-coroutines-corebiblioteca em seu projeto. No arquivo gradle do seu aplicativo (há apenas um arquivo gradle no projeto IntelliJ ou escolha o arquivo gradle para o aplicativo se for um projeto Android), adicione a seguinte linha:
dependencies {
testImplementation(kotlin("test-junit"))
implementation(kotlin("stdlib-jdk8"))
// add coroutine dependency
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.2")
}
1. Use launchpara criar corrotinas
Aqui está um exemplo de uso de uma corrotina para executar uma tarefa de execução longa em segundo plano:
import kotlinx.coroutines.*
fun main() {
// Start a coroutine using the launch function
val job = GlobalScope.launch {
// Perform a long-running task in the background
delay(1000L)
println("Hello, world!")
}
// Wait for the coroutine to finish
runBlocking {
job.join()
}
}
2. Use asyncpara criar corrotinas
Aqui está um exemplo de uso de corrotinas em Kotlin para executar várias tarefas em paralelo e aguardar a conclusão de todas:
import kotlinx.coroutines.*
fun main() {
// Start two coroutines using the async function
val job1 = GlobalScope.async {
// Perform a long-running task in the background
delay(1000L)
println("Task 1")
}
val job2 = GlobalScope.async {
// Perform a different long-running task in the background
delay(2000L)
println("Task 2")
}
// Wait for both coroutines to finish
runBlocking {
job1.await()
job2.await()
}
}
A diferença entre lançamento e assíncrono para iniciar uma corrotina
Ambos são comumente usados para iniciar uma co-rotina. A principal diferença entre os dois é que launchretorna um Job (um futuro cancelável sem bloqueio) e não retorna um resultado, enquanto asyncretorna um Deferred (um futuro cancelável sem bloqueio com um resultado) que pode ser usado para obter o resultado de a corrotina. Considerando a diferença, quando deve usar o launch e o async para criar corrotinas:
- Quando você usa
launcha função, a co-rotina será executada em segundo plano e a chamada da função retornará imediatamente. É usado quando o resultado da co-rotina não é necessário. - Quando você usa
asynca função, a corrotina também será executada em segundo plano e a chamada da função retornará imediatamente, mas retornará umDeferredobjeto no qual você pode chamar a função .await() para obter o resultado da corrotina. É usado quando o resultado da co-rotina é necessário. Por exemplo:
val result = GlobalScope.async {
return@async URL("https://api.example.com/data").readText()
}
val data = result.await()
println(data)
// output: {"fact":"A group of cats is called a \u201cclowder.\u201d","length":38}
O que é mais daqui? Como sabemos, Coroutine é um grande tópico e poucos wears podem explicar tudo isso. Este é o primeiro artigo da série Coroutine. Se você estiver interessado, inscreva-se para mais postagens futuras sobre isso:
- Sem bloqueio em Kotlin Coroutines (entrada esta semana)
- Iniciar e suspender uma corrotina em Kotlin (entrada esta semana)
Originalmente publicado em https://needone.app em 16 de janeiro de 2023.





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)