You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何示例二中的collect函数会无限挂起,与示例一不同?

为什么示例二的collect会无限挂起?

示例一的Flow特性

示例一中的Flow是通过flow { ... }创建的有限冷流:

  • 它仅在被collect时才启动执行代码块,循环1到10依次发送元素
  • 当所有元素都emit完成后,这个Flow会主动触发完成信号,collect函数接收到该信号后就会正常退出,后续的Log.w("ABC", "2")代码也能顺利执行

示例二的DataStore Flow特性

示例二中的dataStore.data是一个无限热流:

  • 它的设计目的是持续监听Preferences的变化,执行时会先发送当前存储的最新值
  • 发送初始值后,它不会主动结束,而是一直处于等待状态,随时准备在Preferences发生修改时发送新值
  • 因此collect会一直挂起在这个Flow上,永远无法收到完成信号,导致后续的Log.w("ABC", "2")永远得不到执行的机会

内容的提问来源于stack exchange,提问作者Taha Sami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:26:01