Flow 基础:03. 异步挂起函数与集合

本篇解析 example-flow-03.kt。探讨如何在异步场景下返回数据集合。

1. 代码解析

1
2
3
4
5
6
7
8
suspend fun simple(): List<Int> {
delay(1000) // 模拟异步耗时
return listOf(1, 2, 3)
}

fun main() = runBlocking {
simple().forEach { println(it) }
}

2. 特点与局限

  • 非阻塞:使用了 delay 而不是 Thread.sleep,挂起时不会占用线程。
  • 非流式:它必须等待 1 秒钟后,一次性返回 [1, 2, 3]
  • 无法实时展示:如果你希望在 1 秒后返回 1,再过 1 秒后返回 2,这种“细水长流”式的产出,普通的 List 是无法做到的。

3. 开发者感悟

当数据量很大,或者每个数据的生成都比较耗时,这种“等全家到齐再出发”的集合模式会造成很长的白屏等待。我们需要一种既能“异步执行”,又能“一个一个产出”的工具,这就是 Flow 登场的原因。

,