本篇解析 example-flow-13.kt。探讨 Flow 在默认情况下运行在哪个线程。
1. 核心准则:上下文保存 (Context Preservation)
Flow 的收集始终发生在调用末端操作符的协程上下文中。
规则解析:
- 如果你在
runBlocking中调用collect,那么 Flow 构建器 (flow { ... }) 里的代码就会运行在runBlocking的线程中。 - 这种特性被称为“上下文保存”。
2. 代码解析
1 | fun simple(): Flow<Int> = flow { |
3. 开发者感悟
这种设计非常安全且易于理解。作为 API 的提供者,你不需要关心调用者在哪个线程运行;作为调用者,你完全控制了数据的消费线程。