Sobes.tech
Middle

¿Qué es la función 'suspend' en Kotlin?

sobes.tech AI

Respuesta de la IA

La función suspend es una función que puede ser suspendida (suspend) y reanudada (resume) posteriormente. Son una parte fundamental de las corutinas en Kotlin y se utilizan para realizar operaciones asíncronas sin bloquear el hilo.

Características clave:

  • Solo puede ser llamada desde otra función suspend o desde el contexto de una corutina. El compilador garantiza esta restricción.
  • No bloquea el hilo. Al realizar una operación asíncrona (por ejemplo, una solicitud de red), la función suspend suspende la ejecución de la corutina, liberando el hilo para otras tareas. Cuando la operación asíncrona termina, la corutina se reanuda desde donde se detuvo.
  • Se usa para el paralelismo estructurado. En combinación con funciones como launch y async de la biblioteca kotlinx.coroutines, permite escribir código asíncrono en un estilo secuencial y fácil de leer.
  • El compilador transforma las funciones suspend en autómatas finitos. Esto permite mantener el estado de la corutina entre puntos de suspensión.

Ejemplo:

import kotlinx.coroutines.*

suspend fun fetchData(): String {
    // Simulación de una operación asíncrona (por ejemplo, una solicitud de red)
    delay(1000) // puntos de suspensión
    return "Datos cargados"
}

fun main() = runBlocking {
    println("Comenzando la carga...")
    val data = fetchData() // Llamada a función suspend
    println(data)
    println("Carga completada")
}

Aquí, fetchData es una función suspend que usa delay (otra función suspend) para simular una demora. delay es un punto de suspensión. runBlocking crea un ámbito de corutina para ejecutar main como un hilo bloqueante, pero dentro de ella, fetchData se ejecuta de manera no bloqueante.