Sobes.tech
Middle

¿Cómo funcionan las construcciones async y await en el lenguaje de programación utilizado para desarrollar aplicaciones en Android?

sobes.tech AI

Respuesta de la IA

En Kotlin, que se usa para el desarrollo de Android, async y await son funciones de la biblioteca de corrutinas. No son palabras clave del lenguaje, como en algunos otros lenguajes.

async inicia una nueva corrutina en segundo plano y devuelve un objeto de tipo Deferred, que representa el resultado de la ejecución en el futuro. La corrutina que llamó a async continúa su trabajo sin esperar a que la operación asíncrona lanzada termine.

await es una función suspending que se llama en un objeto Deferred. Suspende la ejecución de la corrutina actual hasta que la operación asíncrona iniciada con async finalice y devuelva su resultado. Si el resultado ya está disponible, await lo devuelve inmediatamente.

Sintaxis:

import kotlinx.coroutines.*

suspend fun fetchUserData(): String {
    // Simulación de una operación larga
    delay(1000)
    return "Datos del usuario"
}

suspend fun processData(data: String): String {
    // Simulación de otra operación larga
    delay(2000)
    return "Procesado: $data"
}

suspend fun main() {
    val deferredData = CoroutineScope(Dispatchers.IO).async {
        // Obtener datos de forma asíncrona
        fetchUserData()
    }

    // Podemos realizar otro trabajo mientras se cargan los datos

    val data = deferredData.await() // Espera a que fetchUserData() termine

    val processedResult = withContext(Dispatchers.Default) {
        // Procesar los datos, posiblemente en otro hilo
        processData(data)
    }

    println(processedResult) // Mostrará "Procesado: Datos del usuario" después de las demoras
}

Puntos clave:

  • async devuelve Deferred, que es una "promesa" del resultado.
  • await es una función suspending que pausa la corrutina que la llama.
  • Se usan en el contexto de corrutinas para operaciones asíncronas no bloqueantes.
  • Permiten realizar varias tareas asíncronas en paralelo y recopilar sus resultados.