Avatar ·

¿Cuál es la diferencia entre runBlocking y coroutineScope en Kotlin Coroutines?

¡Hola, colegas! Empecé a estudiar coroutines en Kotlin y me encontré con dos funciones que me parecen muy similares: runBlocking y coroutineScope. Leí la documentación, pero para mí su comportamiento aún no es evidente.

Aquí hay un ejemplo que escribí:

fun main() = runBlocking {
    launch {
        delay(1000L)
        println("World!")
    }
    println("Hello,")
}

Y otro:

fun main() = runBlocking {
    coroutineScope {
        launch {
            delay(1000L)
            println("World!")
        }
        println("Hello,")
    }
}

Ambos ejemplos imprimen primero "Hello," y después de un segundo "World!". Pero sospecho que hay una diferencia, y es importante. ¿En qué consiste?

Concretamente me interesa:

  • ¿Por qué runBlocking bloquea el hilo actual, mientras que coroutineScope no?
  • ¿Cómo se comportan estas funciones en un