¿Qué son las Coroutines y para qué sirven?
\n\nLas 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\nLa 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\nLa 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\nInstalación de Coroutines
\n\nDado 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\nGradle (Kotlin DSL)
\ndependencies {\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\nGradle (Groovy DSL)
\ndependencies {\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0'\n implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0'\n}\n\nMaven
\n<dependency>\n <groupId>org.jetbrains.kotlinx</groupId>\n <artifactId>kotlinx-coroutines-core</artifactId>\n <version>1.9.0</version>\n</dependency>\n\nInicio rápido: primer ejemplo
\n\nEscribamos un programa simple que inicia una corrutina, hace una pausa y muestra un mensaje:
\n\nimport 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\nSalida:
\nInicio del programa: main @coroutine#1\n¡Hola, (desde main: @coroutine#1)\n¡Mundo! (desde la corrutina: @coroutine#2)\nFin del programa\n\nObserva: delay() no bloquea el hilo, solo pausa la corrutina actual. El hilo main permanece libre para otras tareas.
Métodos y funciones principales de Coroutines
\n\n1. runBlocking
\nQué 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).
\nParámetros:
\n- \n
context: CoroutineContext— contexto de la corrutina (por defecto EmptyCoroutineContext) \n block: suspend CoroutineScope.() -> T— bloque suspend que se ejecutará \n
Ejemplo:
\nfun main() {\n val result = runBlocking {\n delay(1000L)\n "¡Listo!"\n }\n println(result) // Mostrará: ¡Listo!\n}\n\n2. launch
\nQué 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.
\nParámetros:
\n- \n
context: CoroutineContext
También en la biblioteca
Qt para C++: guía completa con ejemplos
Cliente HTTP para C# (.NET): mejores bibliotecas para trabajar con solicitudes web