Я читал Основы Coroutine , пытаясь понять и выучить его.
Там есть часть с этим кодом:
fun main() = runBlocking { // this: CoroutineScope
launch {
delay(200L)
println("Task from runBlocking")
}
coroutineScope { // Creates a new coroutine scope
launch {
delay(900L)
println("Task from nested launch")
}
delay(100L)
println("Task from coroutine scope") // This line will be printed before nested launch
}
println("Coroutine scope is over") // This line is not printed until nested launch completes
}
Вывод выглядит так:
Task from coroutine scope
Task from runBlocking
Task from nested launch
Coroutine scope is over
Мой вопрос: почему эта строка:
println("Coroutine scope is over") // This line is not printed until nested launch completes
всегда вызывается последней?
Разве она не должна вызываться после:
coroutineScope { // Creates a new coroutine scope
....
}
приостановлено?
Там также есть примечание:
Основное различие между runBlocking и coroutineScope заключается в том, что последний не блокирует текущий поток во время ожиданиявсе дети, чтобы закончить.
Я не понимаю, как coroutineScope и RunBlocking здесь отличаются?coroutineScope выглядит как его блокировка, так как он достигает только последней строки, когда это сделано.
Может ли кто-нибудь просветить меня здесь?
Заранее спасибо.