首页 > 解决方案 > 如何在作用域之间共享 BroadcastChannel?

问题描述

我有一个BroadcastChannel作为缓冲区。我在一个范围内发送值,并希望在另一个范围内使用流来观察它们。

我的代码是:

val channel = BroadcastChannel<Int>(1)

val observable = channel.asFlow()

someScope.launch {
   channel.send(42)
}

otherScope.launch {
  observable.collect {
    print(it)
  }
}

一些信息:

  1. otherScope 的寿命比 someScope 长
  2. 在同一范围内收集时,我收到了值

标签: kotlinkotlin-coroutineskotlin-flow

解决方案


问题collect在于阻止其他集合的操作员。已替换为onEachandlaunchIn一切都按预期工作


推荐阅读