Kotlin 中的顺序协程
Sequential coroutines in Kotlin
我正在尝试了解顺序协程在 Kotlin 中的工作原理。
下一个样本将 运行 它们依次:
fun main(): Unit = runBlocking {
launch {
delay(1000) // Note the delay
println("A")
}.join()
launch {
println("B")
}.join()
}
作为结果,“A”-->“B”
但是接下来运行ning的时候,结果是"B"-->"A",这是我无法理解的:
fun main(): Unit = runBlocking {
val jobA = launch {
delay(1000)
println("A")
}
val jobB = launch {
println("B")
}
jobA.join()
jobB.join()
}
当我首先调用 jobA.join() 时,我原以为它会等到完成后再执行 jobB,无论 jobA 是否调用延迟。
对此有何解释?以及如何在内部延迟的情况下按顺序执行作业实例?
在您的第二个示例中,您启动了两个继续并发执行的协程。之后,您的顶级协程等待第一个协程完成,然后等待第二个协程完成。等待并发协程完成不会干扰它们的执行。
因此,协程按照程序执行,第一个在延迟后打印,第二个立即打印。
我正在尝试了解顺序协程在 Kotlin 中的工作原理。
下一个样本将 运行 它们依次:
fun main(): Unit = runBlocking {
launch {
delay(1000) // Note the delay
println("A")
}.join()
launch {
println("B")
}.join()
}
作为结果,“A”-->“B”
但是接下来运行ning的时候,结果是"B"-->"A",这是我无法理解的:
fun main(): Unit = runBlocking {
val jobA = launch {
delay(1000)
println("A")
}
val jobB = launch {
println("B")
}
jobA.join()
jobB.join()
}
当我首先调用 jobA.join() 时,我原以为它会等到完成后再执行 jobB,无论 jobA 是否调用延迟。 对此有何解释?以及如何在内部延迟的情况下按顺序执行作业实例?
在您的第二个示例中,您启动了两个继续并发执行的协程。之后,您的顶级协程等待第一个协程完成,然后等待第二个协程完成。等待并发协程完成不会干扰它们的执行。
因此,协程按照程序执行,第一个在延迟后打印,第二个立即打印。