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 是否调用延迟。 对此有何解释?以及如何在内部延迟的情况下按顺序执行作业实例?

在您的第二个示例中,您启动了两个继续并发执行的协程。之后,您的顶级协程等待第一个协程完成,然后等待第二个协程完成。等待并发协程完成不会干扰它们的执行。

因此,协程按照程序执行,第一个在延迟后打印,第二个立即打印。