Programação Assíncrona em Kotlin: Guia Completo para Iniciantes

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

Introdução à Programação Assíncrona em Kotlin



Aplicações modernas exigem alta performance e capacidade de resposta. A programação assíncrona permite executar operações longas (requisições de rede, leitura de arquivos, trabalho com bancos de dados) sem bloquear o fluxo principal de execução. Em Kotlin, para isso, utiliza-se um mecanismo poderoso e elegante — as coroutines.



Diferentemente das threads tradicionais, as coroutines são leves, gerenciadas em nível de linguagem e não exigem enormes recursos do sistema. Isso as torna uma ferramenta ideal para escrever código assíncrono que é fácil de ler e manter. Neste guia, vamos abordar os conceitos básicos da programação assíncrona em Kotlin do zero.



1. Fundamentos das Coroutines: o que são e como funcionam?



Uma coroutine é uma instância de uma operação computacional suspensível (suspendable). Ela pode ser pausada em um ponto do código e retomada em outro, sem bloquear a thread. Para trabalhar com coroutines, é necessário adicionar a biblioteca kotlinx.coroutines.



Adicionando a Dependência

Adicione no arquivo build.gradle.kts:

dependencies {    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")}


Primeira Coroutine

Para iniciar uma coroutine, usa-se o builder launch. Ele inicia uma nova coroutine em segundo plano.

import kotlinx.coroutines.*

fun main() = runBlocking { // runBlocking bloqueia a thread principal para aguardar as coroutines println("Início: ${Thread.currentThread().name}")

launch { // inicia uma nova coroutine delay(1000L) // pausa por 1 segundo (não bloqueia a thread!) println("Coroutine: ${Thread.currentThread().name}") }

println("Fim: ${Thread.currentThread().name}")}

Saída:

Início: mainFim: mainCoroutine: main

Observe: delay é uma função suspend que pausa a coroutine, mas não bloqueia a thread. Enquanto a coroutine "dorme", a thread pode executar outro código.



2. Funções Suspend: blocos de construção da assincronicidade



Uma função suspend é uma função que pode ser pausada e retomada posteriormente. Essas funções só podem ser chamadas de outras funções suspend ou de uma coroutine. Elas são marcadas com a palavra-chave suspend.



Exemplo de função suspend

import kotlinx.coroutines.*

suspend fun fetchData(): String { delay(2000L) // simula uma requisição de rede longa return "Dados recebidos"}

fun main() = runBlocking { println("Solicitando dados...") val result = fetchData() // chamada de função suspend de dentro de uma coroutine println(result)}


Execução paralela com async/await

Se precisar executar várias tarefas em paralelo, use o builder async. Ele retorna um Deferred — um objeto que armazena o resultado futuro. O resultado pode ser obtido com await().

import kotlinx.coroutines.*

suspend fun loadUser(): String { delay(1000L) return "Usuário: João"}

suspend fun loadPosts(): String { delay(1500L) return "Posts: Notícias, Artigos"}

fun main() = runBlocking { val time = measureTimeMillis { val userDeferred = async { loadUser() } val postsDeferred = async { loadPosts() }

println(userDeferred.await()) println(postsDeferred.await()) } println("Tempo total: $time ms") // ~1500 ms (tempo máximo entre os dois)}

Sem o async, as tarefas seriam executadas sequencialmente e levariam ~2500 ms. A execução paralela reduziu o tempo para ~1500 ms.



3. Dispatchers: gerenciamento de threads



O Dispatcher determina em qual thread ou pool de threads a coroutine será executada.

Blogs

Book Recommendations