gpt4 book ai didi

kotlin - 协程的执行顺序?

转载 作者:行者123 更新时间:2023-12-02 13:18:31 25 4
gpt4 key购买 nike

我运行代码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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com