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

Programação Assíncrona em Kotlin: guia completo para iniciantes

\n\n

Os aplicativos modernos cada vez mais exigem a execução de várias tarefas simultaneamente: carregar dados da rede, trabalhar com banco de dados, processar entrada do usuário. Na linguagem Kotlin, para isso, utiliza-se a programação assíncrona, baseada em corrotinas (coroutines). Esta é uma ferramenta poderosa e elegante que permite escrever código não bloqueante sem callbacks complexos.

\n\n

Neste artigo, vamos abordar os fundamentos da programação assíncrona em Kotlin: o que são corrotinas, como usar launch, async e await, além de conhecer os dispatchers e o tratamento de erros. O material é voltado para desenvolvedores iniciantes que já conhecem o básico da sintaxe do Kotlin.

\n\n

O que são corrotinas e para que servem?

\n\n

Uma corrotina é um fluxo de execução leve que pode ser pausado e retomado sem bloquear a thread principal. Diferente das threads tradicionais, as corrotinas não estão vinculadas a recursos do sistema e podem ser executadas em uma única thread, alternando entre si.

\n\n

Principais vantagens das corrotinas:

\n
    \n
  • Leveza — é possível executar milhares de corrotinas sem consumo significativo de memória.
  • \n
  • Suspensão (suspend) — uma função pode "congelar" sua execução sem bloquear a thread.
  • \n
  • Concorrência estruturada — as corrotinas gerenciam automaticamente seu ciclo de vida.
  • \n
  • Simplicidade — o código parece síncrono, sem callbacks aninhados.
  • \n
\n\n

Para trabalhar com corrotinas, é necessário adicionar a dependência no build.gradle.kts:

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

Blocos de construção principais: launch, async e suspend

\n\n

Função suspend

\n\n

Qualquer função que pode pausar a execução de uma corrotina é marcada com a palavra-chave suspend. Essas funções só podem ser chamadas dentro de uma corrotina ou de outra função suspend.

\n\n
suspend fun fetchUserData(): String {\n    delay(1000) // simulação de atraso\n    return "User data loaded"\n}
\n\n

A função delay() é análoga ao Thread.sleep(), mas sem bloquear a thread.

\n\n

launch — iniciar corrotina sem resultado

\n\n

O builder launch inicia uma nova corrotina que não retorna resultado (retorna um Job). É usado para tarefas do tipo "inicie e esqueça".

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    launch {\n        println("Corrotina 1 iniciada")\n        delay(1000)\n        println("Corrotina 1 concluída")\n    }\n    println("Thread principal continua trabalhando")\n}
\n\n

Saída:

\n
Thread principal continua trabalhando\nCorrotina 1 iniciada\nCorrotina 1 concluída
\n\n

Observe: runBlocking é usado apenas em exemplos didáticos ou em pontos de entrada (por exemplo, em main()). Em aplicações reais (Android, servidor), não é necessário utilizá-lo.

\n\n

async e await — obtendo resultado

\n\n

Se a corrotina deve retornar um resultado, usa-se o builder async. Ele retorna um objeto Deferred<T>, do qual o valor pode ser obtido com await().

\n\n
fun main() = runBlocking {\n    val deferredResult: Deferred<String> = async {\n        delay(1500)\n        "Resultado dos cálculos"\n    }\n\n    println("Aguardando resultado...")\n    val result = deferredResult.await()\n    println("Resultado obtido: $result")\n}
\n\n

Saída:

\n
Aguardando resultado...\nResultado obtido: Resultado dos cálculos
\n\n

Com async, é possível executar várias tarefas em paralelo:

\n\n


                
                

Blogs

Book Recommendations