我正在阅读协程基础,试图理解和学习它。
其中有一部分代码如下:
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看起来像是阻塞的,因为它只有在完成后才能到达最后一行。
有人能解释一下吗?
coroutineScope
的文档很有启发性。 - Roland