Coroutines para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

¿Qué son las Coroutines y para qué sirven?

\n\n

Las Coroutines (corrutinas) son una potente herramienta para la programación asíncrona en Kotlin que permite escribir código no bloqueante en un estilo imperativo. A diferencia de los hilos (threads) tradicionales, las corrutinas son ligeras: puedes ejecutar miles de corrutinas en un solo hilo sin un consumo significativo de memoria.

\n\n

La principal tarea de las Coroutines es simplificar el trabajo con operaciones asíncronas: solicitudes de red, lectura de bases de datos, operaciones de archivos y otras tareas que requieren espera. En lugar de usar complejos callbacks o streams reactivos, escribes código secuencial que se pausa durante la espera y se reanuda después de que la operación se completa.

\n\n

La biblioteca Coroutines es parte del ecosistema de Kotlin y cuenta con soporte oficial de JetBrains. Se utiliza ampliamente en el desarrollo de Android, aplicaciones de servidor (Ktor, Spring WebFlux) e incluso en aplicaciones de escritorio.

\n\n

Instalación de Coroutines

\n\n

Dado que Coroutines no es una biblioteca separada para instalar mediante pip o npm, sino parte del ecosistema de Kotlin, su inclusión depende de tu gestor de compilación.

\n\n

Gradle (Kotlin DSL)

\n
dependencies {\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0")\n    // Para Android o uso de Dispatchers.Main\n    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0")\n}
\n\n

Gradle (Groovy DSL)

\n
dependencies {\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'\n    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'\n}
\n\n

Maven

\n
<dependency>\n    <groupId>org.jetbrains.kotlinx</groupId>\n    <artifactId>kotlinx-coroutines-core</artifactId>\n    <version>1.9.0</version>\n</dependency>
\n\n

Inicio rápido: primer ejemplo

\n\n

Escribamos un programa simple que inicia una corrutina, hace una pausa y muestra un mensaje:

\n\n
import kotlinx.coroutines.*\n\nfun main() = runBlocking {\n    println("Inicio del programa: ${Thread.currentThread().name}")\n    \n    launch {\n        delay(1000L) // Pausamos la corrutina por 1 segundo (sin bloquear el hilo)\n        println("¡Mundo! (desde la corrutina: ${Thread.currentThread().name})")\n    }\n    \n    println("¡Hola, (desde main: ${Thread.currentThread().name})")\n    delay(500L) // Esperamos para que la corrutina tenga tiempo de ejecutarse\n    println("Fin del programa")\n}
\n\n

Salida:

\n
Inicio del programa: main @coroutine#1\n¡Hola, (desde main: @coroutine#1)\n¡Mundo! (desde la corrutina: @coroutine#2)\nFin del programa
\n\n

Observa: delay() no bloquea el hilo, solo pausa la corrutina actual. El hilo main permanece libre para otras tareas.

\n\n

Métodos y funciones principales de Coroutines

\n\n

1. runBlocking

\n

Qué hace: Inicia una nueva corrutina y bloquea el hilo actual hasta que finaliza. Se utiliza como puente entre el código síncrono normal y el mundo de las corrutinas (normalmente en la función main o en pruebas).

\n

Parámetros:

\n
    \n
  • context: CoroutineContext — contexto de la corrutina (por defecto EmptyCoroutineContext)
  • \n
  • block: suspend CoroutineScope.() -> T — bloque suspend que se ejecutará
  • \n
\n

Ejemplo:

\n
fun main() {\n    val result = runBlocking {\n        delay(1000L)\n        "¡Listo!"\n    }\n    println(result) // Mostrará: ¡Listo!\n}
\n\n

2. launch

\n

Qué hace: Inicia una nueva corrutina que no devuelve un resultado (análogo a fire-and-forget). Devuelve un objeto Job que se puede usar para cancelar o esperar.

\n

Parámetros:

\n
    \n
  • context: CoroutineContext

Recommendations