我运行代码A并获得结果A,运行代码B并获得结果B,
我认为结果B应该是结果B +,因为调用了b.await()
,为什么执行未按预期进行?
代码A
fun main() = runBlocking {
val a = async {
//delay(200L)
println("A1")
}
val b = async {
//delay(100L)
println("A2")
}
//b.await()
println("A3")
}
结果
A3
A1
A2
代码B
fun main() = runBlocking {
val a = async {
//delay(200L)
println("A1")
}
val b = async {
//delay(100L)
println("A2")
}
b.await()
println("A3")
}
结果B
A1
A2
A3
结果B +
A2
A3
A1
添加了内容
顺便说一句,代码C获得结果B +
代码C
fun main() = runBlocking {
val a = async {
delay(200L)
println("A1")
}
val b = async {
delay(100L)
println("A2")
}
b.await()
println("A3")
}
最佳答案
看来代码中的放置顺序也会影响调用。因为即使这样的代码:
fun main() = runBlocking {
val a = async {
delay(200L)
println("A1")
}
val b = async {
delay(200L)
println("A2")
}
b.await()
a.await()
println("A3")
}
将输出:
A1
A2
A3
对于输出A2,A3,A1,可以使用:
fun main() = runBlocking {
val a = async(start = CoroutineStart.LAZY) {
//delay(200L)
println("A1")
}
val b = async(start = CoroutineStart.LAZY) {
//delay(200L)
println("A2")
}
b.await()
println("A3")
a.await()
}
关于kotlin - 协程的执行顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61356749/