【发布时间】:2019-10-25 08:49:27
【问题描述】:
我有一个第三方库,您可以在其中订阅一些 topic 以接收关于该 topic 的更新(带有回调)。但问题是,当您再次使用相同的 topic 调用 subscribe 方法时,之前的订阅会默默地替换为新的订阅。
现在,我想将回调替换为 Flow。于是我写了如下代码:
val flow: Flow<Message> = callbackFlow {
lib.subscribe(topic) { message -> offer(message) }
awaitClose { lib.unsubscribe(topic) }
}
但是当我多次拨打collect 时,只有最后一个收到消息。
那么我怎样才能做到这一点:
- 对同一主题有多个订阅
- 当最后一个订阅者关闭/取消时,取消订阅给定主题。
我已经看过BroadcastChannel,但是我找不到任何东西来解决第二个要求。而且我刚刚开始探索Flows,所以也许有一些我只是错过的简单包装器。
【问题讨论】: