O que é launch em Kotlin?

O launch é um coroutine builder que inicia uma nova coroutine sem retornar resultado. Ele é do tipo “fire-and-forget” — você dispara a coroutine e segue em frente. Perfeito pra tarefas que precisam rodar em background mas não precisam devolver um valor.

O launch retorna um Job, que permite controlar o ciclo de vida da coroutine: cancelar, esperar terminar ou verificar o status.

Exemplo básico

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        println("Coroutine iniciada")
        delay(1000)
        println("Coroutine finalizada")
    }

    println("Código principal continua...")
    job.join() // Espera a coroutine terminar
}

Saída:

Código principal continua...
Coroutine iniciada
Coroutine finalizada

Controlando com Job

O Job retornado pelo launch oferece várias possibilidades:

import kotlinx.coroutines.*

fun main() = runBlocking {
    val job = launch {
        repeat(100) { i ->
            println("Processando item $i")
            delay(200)
        }
    }

    delay(1000)
    println("Cansou de esperar!")
    job.cancel()
    println("Job cancelado: ${job.isCancelled}")
}

Dispatchers

Você pode escolher em qual thread a coroutine vai rodar:

import kotlinx.coroutines.*

fun main() = runBlocking {
    launch(Dispatchers.Default) {
        println("CPU-intensivo em: ${Thread.currentThread().name}")
    }

    launch(Dispatchers.IO) {
        println("Operação de I/O em: ${Thread.currentThread().name}")
    }
}
  • Dispatchers.Default — tarefas pesadas de CPU
  • Dispatchers.IO — operações de entrada/saída
  • Dispatchers.Main — thread principal (Android)

launch vs async

A diferença é simples: launch não retorna valor, async retorna. Se você precisa do resultado da coroutine, use async. Se é só pra executar algo no background, launch resolve.

// Não precisa do resultado? Use launch
launch { salvarNoLog("evento_123") }

// Precisa do resultado? Use async
val dados = async { buscarDados() }
println(dados.await())

launch é provavelmente o coroutine builder que você mais vai usar no dia a dia.