Sobes.tech
Middle

Como funcionam as construções async e await na linguagem de programação usada para desenvolver aplicações Android?

sobes.tech IA

Resposta da IA

No Kotlin, usado para desenvolvimento Android, async e await são funções da biblioteca de corrotinas. Elas não são palavras-chave da linguagem, como em algumas outras linguagens.

async inicia uma nova corrotina em segundo plano e retorna um objeto do tipo Deferred, que representa o resultado da execução no futuro. A corrotina que chamou async continua seu trabalho sem esperar a operação assíncrona iniciada terminar.

await é uma função suspending que é chamada em um objeto Deferred. Ela suspende a execução da corrotina atual até que a operação assíncrona iniciada com async seja concluída e retorne seu resultado. Se o resultado já estiver disponível, await o retorna imediatamente.

Sintaxe:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulação de uma operação longa
    delay(1000)
    return "Dados do usuário"
}

suspend fun processData(data: String): String {
    // Simulação de outra operação longa
    delay(2000)
    return "Processado: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Obter dados de forma assíncrona
        fetchUserData()
    }

    // Podemos fazer outro trabalho enquanto os dados estão sendo carregados

    val data = deferredData.await() // Espera a conclusão de fetchUserData()

    val processedResult = withContext(Dispatchers.Default) {
        // Processa os dados, possivelmente em outra thread
        processData(data)
    }

    println(processedResult) // Vai imprimir "Processado: Dados do usuário" após os atrasos
}

Pontos principais:

  • async retorna Deferred, que é uma "promessa" do resultado.
  • await é uma função suspending que pausa a corrotina que a chama.
  • Usado no contexto de corrotinas para operações assíncronas não bloqueantes.
  • Permite executar várias tarefas assíncronas em paralelo e coletar seus resultados.