You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

coroutineScope为何不等待子协程?Kotlin协程技术疑问

Kotlin协程执行逻辑与coroutineScope返回含义解析

为什么"30 Degrees"会提前输出?

你通过launch启动的两个子协程是并发执行的,它们的任务流程相互独立:

  • getTemperature延迟100ms后就会执行输出操作,不会等待getWind的3s延迟完成
  • getWind会在自身的3s延迟结束后才执行输出
    这完全符合协程并发的设计逻辑——多个协程可以同时推进各自的任务,各自的任务完成时机由自身代码逻辑决定,不会互相阻塞内部的执行步骤。

官方文档中coroutineScope"函数返回"的具体含义

coroutineScope作为挂起函数,它的"返回"指的是:当调用coroutineScope时,当前协程会被挂起,直到所有在coroutineScope内部通过launch/async启动的子协程全部执行完毕,才会继续执行coroutineScope之后的代码。

举个实际代码场景的例子:

suspend fun getWeatherReport() = coroutineScope {
    launch { getTemperature() } // 100ms后输出"30 Degrees"
    launch { getWind() }       // 3s后输出风力信息
    // 以下代码会在两个子协程都完成后才执行
    println("所有天气数据获取完成")
}

这时"所有天气数据获取完成"会在3s后(也就是getWind执行完毕后)才输出,而不是在100ms后。这就是coroutineScope"等待所有子协程完成后才返回"的核心体现——它控制的是当前协程中coroutineScope后续代码的执行时机,而非子协程内部任务的执行节奏。

核心总结

  • 子协程的内部任务(比如输出操作)会按自身逻辑的时机独立执行,并发推进
  • coroutineScope的"等待返回",是确保当前协程不会在子协程全部结束前,执行coroutineScope块之外的代码

内容的提问来源于stack exchange,提问作者steeveKA1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 06:22:07