本篇解析 example-flow-35.kt。探讨如何在不阻塞当前协程的情况下监听 Flow。
1. 核心问题:Collect 是挂起并等待的
collect 是一个末端操作符,它会挂起当前协程,直到 Flow 所有的值都被收集完成。
代码解析
1 | events() |
2. 开发者感悟
如果你在处理 UI 事件流(比如按钮点击或 Socket 消息),直接使用 collect 会导致其后的代码无法执行。这就像是你守在一个窗口前,不等到人(流结束)就不走开。为了解决这个问题,我们需要 launchIn。