gpt4 book ai didi

Kotlin 协程异步等待序列

转载 作者:行者123 更新时间:2023-12-04 16:33:16 26 4
gpt4 key购买 nike

你能解释一下这两个代码块有什么区别吗?第一次打印 421,但第二次打印 606。为什么第一个是并行的,第二个是顺序的?

fun main(args: Array<String>) = runBlocking {

var time = measureTimeMillis {
val one = async { one() }
val two = async { two() }
val int1 = one.await()
val int2 = two.await()
println(int1 + int2)

}

println(time)


time = measureTimeMillis {
val one = async { one() }.await()
val two = async { two() }.await()
println(one + two)

}

print(time)
}

suspend fun one(): Int {
delay(200)
return 12
}

suspend fun two(): Int {
delay(400)
return 23
}

最佳答案

val one = async { one() }
val two = async { two() }
val int1 = one.await()
val int2 = two.await()

这是做什么的:
  • 生成任务一
  • 生成任务二
  • 等待任务一
  • 等待任务二

  • val one = async { one() }.await()
    val two = async { two() }.await()

    这是做什么的:
  • 生成任务一
  • 等待任务一
  • 生成任务二
  • 等待任务二

  • 这里没有并发,它是纯粹的顺序代码。事实上,对于顺序执行,你甚至不应该使用 async .正确的成语是
    val one = withContext(Dispatchers.Default) { one() }
    val two = withContext(Dispatchers.Default) { two() }

    关于Kotlin 协程异步等待序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52369508/

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