本篇解析 example-flow-21.kt。探讨 zip 在处理不同速流时的行为。
1. 核心概念:等待最慢的那一个
zip 组合时,每个元素都必须成对出现。如果一个流快,另一个流慢,快的那个流必须等待慢的流产出对应的元素。
2. 代码解析
1 | val nums = (1..3).asFlow().onEach { delay(300) } // 每 300ms 产出一个 |
- 结果分析:
- 第一对 (1, one):在 400ms 后产出(等待 strs)。
- 第二对 (2, two):在 800ms 后产出(累加等待)。
- 第三对 (3, three):在 1200ms 后产出。
3. 开发者感悟
zip 具有天然的同步属性。它就像是齿轮咬合:只有两个齿轮都转到对应位置,这一格才算走完。如果你的业务场景允许两端流“各自跑,谁快谁更新”,那么你应该使用 combine 而不是 zip。