为什么Kotlin中MutableStateFlow的collect方法后代码不可达?
为什么后续的println语句无法执行?
先看你的代码:
var hotFlow = MutableStateFlow("John") lifecycleScope.launch{ hotFlow.collect { println("Value Of Data $it") } println("Hello UnReachable") }
核心原因是collect函数的特性:
MutableStateFlow是热流,它会始终持有一个当前值,而collect作为挂起函数,会持续监听流的新值发射,不会自行终止。- 除非所在的协程被取消,否则
collect会一直停在那里运行,后面的代码根本没机会执行。编译器能识别这种逻辑,所以直接标记那行println为不可达代码。
如果想让后续代码执行,可以通过操作符限制collect的执行次数或终止条件,比如用take只收集指定次数的发射:
lifecycleScope.launch{ // 只收集1次值后结束collect流程 hotFlow.take(1).collect { println("Value Of Data $it") } println("Hello Now Reachable") }
内容的提问来源于stack exchange,提问作者Swagat Ranjan Das
相关产品推荐
相关产品推荐

