我在读 协同程序基础试图理解和学习它。
这里有一段代码:
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
....
}
被停职了?
这里还有一个注释:
RunBlock 和 coroutineScope 之间的主要区别在于,后者在等待所有子线程完成时不会阻塞当前线程。
我不明白 coroutineScope 和 runBlock 在这里有什么不同?CoroutineScope 看起来像是它的阻塞,因为它只在完成后才到达最后一行。
有人能告诉我吗?
先谢谢你。