Я читал основы 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 выглядит как его блокировка, так как он достигает только последней строки, когда это сделано.
Кто-нибудь может просветить меня здесь?
Заранее спасибо.