本篇解析 example-flow-10.kt。学习如何限制 Flow 的产出数量。
1. 核心概念
take(n) 操作符类似于 List 的同名函数,它只截取流中的前 n 个元素。
关键点:取消机制
- 截断并取消:当收集到第
n个元素后,take会自动取消对应的协程,并触发 Flow 构建器的finally块。
2. 代码解析
1 | fun numbers(): Flow<Int> = flow { |
- 虽然
flow块中写了三个emit,但take(2)在拿到前两个后就通过抛出异常(内部取消)的方式结束了流。
3. 开发者感悟
take 在处理无限流或大数据流时非常有用。例如:监听传感器数据,但只要前 10 条结果就结束。它能确保协程被及时取消,不会浪费 CPU 资源。