我现在正在学习协程。测试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()会改变结果?
1条答案
按热度按时间9udxz4iz1#
你有一个比赛条件。没有定义/保证这些不同的print语句将执行的顺序。在绝大多数情况下,结果可能是相同的,因为相同的代码在同一设备上运行,然后当您更改导致处理量略有差异的内容时,它会转向更有可能的其他结果。但无论哪种方式,订单都没有保证。