本篇文档解析 example-basic-04.kt,探讨如何在同一个作用域内处理多个并发任务。
1. 核心概念:多个 launch 的并发行为
在同一个 coroutineScope 或 runBlocking 中,如果你连续调用多个 launch,它们会立即并发执行,而不会互相等待。
代码解析
1 | suspend fun doWorld() = coroutineScope { |
- 并行启动:两个
launch块几乎同时启动。 - 非阻塞主流程:
println("Hello")会在launch启动后立即执行,不会等待 1 秒或 2 秒。 - 自动等待完成:
coroutineScope会确保其内部的所有子协程(World 1 和 World 2)都完成后,doWorld()函数才会返回。
2. 输出顺序分析
- Hello:主流程立即打印。
- World 1:经过 1000ms 后打印(因为它延迟最短)。
- World 2:经过 2000ms 后打印(从开始计时起)。
3. 开发者感悟
可以将 launch 理解为向 CoroutineScope 注册了一个待执行的任务。这些任务被“塞”进作用域后,它们在各自的轨道上并行运行。这种模式极大地简化了复杂的异步逻辑,避免了传统回调地狱。