O que são Coroutines e para que servem?
\n\nCoroutines (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\nA 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\nA 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\nInstalação das Coroutines
\n\nComo 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\nGradle (Kotlin DSL)
\ndependencies {\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\nGradle (Groovy DSL)
\ndependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'\n}\n\nMaven
\n<dependency>\n <groupId>org.jetbrains.kotlinx</groupId>\n <artifactId>kotlinx-coroutines-core</artifactId>\n <version>1.9.0</version>\n</dependency>\n\nInício rápido: primeiro exemplo
\n\nVamos escrever um programa simples que inicia uma corrotina, faz uma pausa e exibe uma mensagem:
\n\nimport 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\nSaída:
\nInício do programa: main @coroutine#1\nOlá, (do main: @coroutine#1)\nMundo! (da corrotina: @coroutine#2)\nFim do programa\n\nObserve: delay() não bloqueia a thread, apenas pausa a corrotina atual. A thread main permanece livre para outras tarefas.
Métodos e funções principais das Coroutines
\n\n1. runBlocking
\nO 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).
\nParâmetros:
\n- \n
context: CoroutineContext— contexto da corrotina (padrão: EmptyCoroutineContext) \n block: suspend CoroutineScope.() -> T— bloco suspend que será executado \n
Exemplo:
\nfun main() {\n val result = runBlocking {\n delay(1000L)\n "Pronto!"\n }\n println(result) // Exibirá: Pronto!\n}\n\n2. launch
\nO 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.
\nParâmetros:
\n- \n
context: CoroutineContext
Também na biblioteca
Validação de dados em C++: bibliotecas, padrões e exemplos de código
node-cache: Cacheamento Simples e Eficiente em Node.js
Codable Swift: guia completo com exemplos práticos
Valgrind para C++: guia completo com exemplos práticos
Aprendizado de Máquina em JavaScript: bibliotecas para Node.js — visão geral e exemplos