Что выведет код 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 ошибок.