Coroutines para Kotlin: guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

O que são Coroutines e para que servem?

\n\n

Coroutines (corrotinas) são uma ferramenta poderosa para programação assíncrona em Kotlin, que permite escrever código não bloqueante em estilo imperativo. Diferentemente das threads tradicionais, as corrotinas são leves: você pode executar milhares de corrotinas em uma única thread sem consumo significativo de memória.

\n\n

A principal função das Coroutines é simplificar o trabalho com operações assíncronas: requisições de rede, leitura de banco de dados, operações de arquivo e outras tarefas que exigem espera. Em vez de usar callbacks complexos ou streams reativos, você escreve código sequencial que pausa durante a espera e retoma após a conclusão da operação.

\n\n

A biblioteca Coroutines faz parte do ecossistema Kotlin e é oficialmente mantida pela JetBrains. Ela é amplamente usada no desenvolvimento Android, em aplicações servidoras (Ktor, Spring WebFlux) e até em aplicações desktop.

\n\n

Instalação das Coroutines

\n\n

Como Coroutines não é uma biblioteca separada para instalação via pip ou npm, mas sim parte do ecossistema Kotlin, sua inclusão depende do seu gerenciador de build.

\n\n

Gradle (Kotlin DSL)

\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")\n    // Para Android ou uso de Dispatchers.Main\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")\n}
\n\n

Gradle (Groovy DSL)

\n
dependencies {\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'\n}
\n\n

Maven

\n
<dependency>\n    <groupId>org.jetbrains.kotlinx</groupId>\n    <artifactId>kotlinx-coroutines-core</artifactId>\n    <version>1.9.0</version>\n</dependency>
\n\n

Início rápido: primeiro exemplo

\n\n

Vamos escrever um programa simples que inicia uma corrotina, faz uma pausa e exibe uma mensagem:

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    println("Início do programa: ${Thread.currentThread().name}")\n    \n    launch {\n        delay(1000L) // Pausa a corrotina por 1 segundo (sem bloquear a thread)\n        println("Mundo! (da corrotina: ${Thread.currentThread().name})")\n    }\n    \n    println("Olá, (do main: ${Thread.currentThread().name})")\n    delay(500L) // Aguarda para que a corrotina tenha tempo de executar\n    println("Fim do programa")\n}
\n\n

Saída:

\n
Início do programa: main @coroutine#1\nOlá, (do main: @coroutine#1)\nMundo! (da corrotina: @coroutine#2)\nFim do programa
\n\n

Observe: delay() não bloqueia a thread, apenas pausa a corrotina atual. A thread main permanece livre para outras tarefas.

\n\n

Métodos e funções principais das Coroutines

\n\n

1. runBlocking

\n

O que faz: Inicia uma nova corrotina e bloqueia a thread atual até sua conclusão. Usado como ponte entre código síncrono comum e o mundo das corrotinas (geralmente na função main ou em testes).

\n

Parâmetros:

\n
    \n
  • context: CoroutineContext — contexto da corrotina (padrão: EmptyCoroutineContext)
  • \n
  • block: suspend CoroutineScope.() -> T — bloco suspend que será executado
  • \n
\n

Exemplo:

\n
fun main() {\n    val result = runBlocking {\n        delay(1000L)\n        "Pronto!"\n    }\n    println(result) // Exibirá: Pronto!\n}
\n\n

2. launch

\n

O que faz: Inicia uma nova corrotina que não retorna resultado (análogo a fire-and-forget). Retorna um objeto Job, que pode ser usado para cancelamento ou espera.

\n

Parâmetros:

\n
    \n
  • context: CoroutineContext

Recommendations