Что выведет код Junior Корутины и structured concurrency обновлено

Порядок выполнения launch в runBlocking

Вопрос

Что выведет код? По строке на каждый вывод.

import kotlinx.coroutines.*

fun main() = runBlocking<Unit> {
    println("1")
    launch { println("3") }
    println("2")
    launch {
        delay(100)
        println("5")
    }
    launch { println("4") }
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 1, 2, 3, 4, 5. runBlocking работает в одном потоке со своим циклом событий. launch не выполняет блок сразу, а ставит корутину в очередь, поэтому сначала печатаются 1 и 2.

Что выведет

1
2
3
4
5

Разбор

runBlocking работает в одном потоке со своим циклом событий. launch не выполняет блок сразу, а ставит корутину в очередь, поэтому сначала печатаются 1 и 2. Когда тело runBlocking дошло до конца, он ждёт детей: выполняются 3, затем вторая корутина доходит до delay и приостанавливается, выполняется 4, и через 100 мс 5.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.