Sobes.tech
Middle

O que é a função 'suspend' em Kotlin?

sobes.tech IA

Resposta da IA

A função suspend é uma função que pode ser suspensa (suspend) e retomada (resume) posteriormente. Elas são uma parte fundamental das corrotinas em Kotlin e são usadas para realizar operações assíncronas sem bloquear a thread.

Características principais:

  • Só pode ser chamada de outra função suspend ou do contexto de uma corrotina. O compilador garante essa restrição.
  • Não bloqueia a thread. Ao realizar uma operação assíncrona (por exemplo, uma requisição de rede), a função suspend suspende a execução da corrotina, liberando a thread para outras tarefas. Quando a operação assíncrona termina, a corrotina é retomada de onde parou.
  • Usada para paralelismo estruturado. Em combinação com funções como launch e async da biblioteca kotlinx.coroutines, permite escrever código assíncrono de forma sequencial e fácil de ler.
  • O compilador transforma funções suspend em autômatos finitos. Isso permite manter o estado da corrotina entre os pontos de suspensão.

Exemplo:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulação de uma operação assíncrona (por exemplo, uma requisição de rede)
    delay(1000) // pontos de suspensão
    return "Dados carregados"
}

fun main() = runBlocking {
    println("Começando o carregamento...")
    val data = fetchData() // Chamada de função suspend
    println(data)
    println("Carregamento concluído")
}

Aqui, fetchData é uma função suspend que usa delay (outra função suspend) para simular um atraso. delay é um ponto de suspensão. runBlocking cria um escopo de corrotina para executar main como uma thread bloqueante, mas dentro dela, fetchData é executada de forma não bloqueante.