kotlin 使用supervisorJob()时结果不同,尽管没有错误

rjee0c15  于 2023-10-23  发布在  Kotlin
关注(0)|答案(1)|浏览(198)

我现在正在学习协程。测试supervisorJob(),我发现了一些无法理解的情况。当我使用supervisorJob()而不使用时,结果是不同的,尽管没有错误。

fun main(): Unit = runBlocking {
    launch(SupervisorJob()) {
        launch {
            println("Launch A")
            launch {
                println("Launch B")
            }
        }

        launch {
            println("Launch A End")
        }
    }
}
  • 使用supervisorJob()时的结果 *
Launch A
Launch B
Launch A End
  • 不使用supervisorJob()*
Launch A
Launch A End
Launch B

我不明白这个区别,为什么supervisorJob()会改变结果?

9udxz4iz

9udxz4iz1#

你有一个比赛条件。没有定义/保证这些不同的print语句将执行的顺序。在绝大多数情况下,结果可能是相同的,因为相同的代码在同一设备上运行,然后当您更改导致处理量略有差异的内容时,它会转向更有可能的其他结果。但无论哪种方式,订单都没有保证。

相关问题