协程,代码执行顺序(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 协程是并发执行的,调度器决定谁先运行。

 

关键点总结

image

 

总结

image

 

posted @ 2026-01-08 15:53  touchmore  阅读(2)  评论(0)    收藏  举报