协程,代码执行顺序(2)
协程,代码执行顺序(2)
//示例3
fun main() = runBlocking { val deferred1 = async { println("calculateSum1") calculateSum(1, 2) } println("deferred1") val deferred2 = async { println("calculateSum2") calculateSum(3, 4) } println("deferred2") // 主线程在此处挂起,等待deferred1完成。 // await()会挂起当前协程,等待 deferred1 的计算结果。 // 挂起当前协程,等待结果,不阻塞主线程(在 runBlocking 内表现为阻塞) val result1 = deferred1.await() println("result1") val result2 = deferred2.await() println("result2") println("sum=${result1 + result2}") } suspend fun calculateSum(a: Int, b: Int): Int { delay(3000) return a + b }
最终输出顺序:
deferred1
deferred2
calculateSum1
calculateSum2
result1
result2
sum=10
❗ 注意:"calculateSum1" 和 "calculateSum2" 的打印顺序可能互换,因为两个 async 协程是并发执行的,调度器决定谁先运行。
关键点总结

总结


浙公网安备 33010602011771号