En la entrada anterior puedes ver cuales son las dependencias para poder usar una corrutina en tu proyecto.
La principal forma de iniciar una corrutina es con coroutine builder launch
en un contexto de algún CoroutineScope
. Vamos a verlo con varios ejemplos.
import kotlinx.coroutines.* fun main() { //sampleStart GlobalScope.launch { delay(1000L) // retraso non-blocking de 1 segundo println("World!") // Mostramos al terminar el delay } println("Hello,") // Mientras la corrutina se ejecuta, el hilo principal sigue Thread.sleep(2000L) // Bloqueo del hilo priincpal durante 2 segundos para mantener vivo el JVM //sampleEnd }
Como vemos se muestra primero "Hello,"
, eso es porque mostrar "World!"
tardará al menos 1 segundo. Si no utilizásemos Thread.sleep(2000L)
, se terminaría la ejecución de la aplicación antes de que finalizase la corrutina.
Podemos sustituir este Thread.sleep
por runBlocking
(este solo se debe utilizar para pruebas) para evitar tener que calcular cuanto tiempo debería bloquearse el hilo principal en función de la duración de la corrutina.
import kotlinx.coroutines.* //sampleStart fun main() = runBlocking { launch { delay(1000L) // retraso non-blocking de 1 segundo println("World!") // Mostramos al terminar el delay } println("Hello,") // Mientras la corrutina se ejecuta, el hilo principal sigue } //sampleEnd
Es más, podemos ejecutar varias en paralelo. Por ejemplo dos corrutinas que tardarían en finalizar 1 segundo una y 2 segundos otra, tendrán una duración total de 2 segundos, y no de 3 segundos, ya que la primera finalizaría cuando la segunda llevase 1 segundo, por lo que solo habría que esperar otro segundo más.
import kotlinx.coroutines.* import kotlin.system.measureTimeMillis fun main() = runBlocking { //sampleStart val time = measureTimeMillis { val job1 = launch { delay(2000L) println("World!") } val job2 = launch { delay(1000L) println("Hello, ") } joinAll(job1, job2) } println("Time: $time") // ~= 2000ms //sampleEnd }
Como habrás visto, hemos añadido algo nuevo: Job
. Pero de eso hablaremos en la siguiente entrada.
Enlaces de interés:
En esta lección aprenderás a declarar variables y los tipos básicos.
La mejor forma de aprender algo en esta vida es a base de practicar. Espero…
Las coroutines en Kotlin vienen a tratar de solucionar todos los problemas y dificultades que…
Con este esquema te puedes guiar a la hora de elegir el modismo o función…
El último que queda por ver es with qué en inglés significa "con". Por lo…
Con run a diferencia de apply no se devuelve el objeto si no que devuelve…