协程进阶:组合 03. 惰性并发 (CoroutineStart.LAZY)

本篇解析 example-compose-03.kt。探讨如何延迟启动一个并发任务。

1. 核心概念:惰性启动

async 中,通过设置 start = CoroutineStart.LAZY,协程在调用时不会立即启动

启动方式:

  1. **await()**:如果直接调用 await(),协程会开始运行并挂起等待结果(这会导致任务变成顺序执行)。
  2. **start()**:在 await() 之前手动调用 start(),可以实现并发启动。

2. 代码解析

1
2
3
4
5
6
val one = async(start = CoroutineStart.LAZY) { doSomethingUsefulOne() }
val two = async(start = CoroutineStart.LAZY) { doSomethingUsefulTwo() }

one.start() // 提前启动
two.start() // 提前启动
println("The answer is ${one.await() + two.await()}")

3. 开发者感悟

LAZY 模式就像是“按需加载”。它可以让你先定义好复杂的并发逻辑,在真正需要的地方才一键启动。但要小心,如果不先调用 start() 就直接 await(),你的多个任务就会变成串行,从而失去并发的优势。

,