Kotlin ConflatedBroadcastChannel.offer() 不起作用?

Kotlin ConflatedBroadcastChannel.offer() doesn't work?

我正在通过 MyRepository.myConflatedChannel.offer(myvalue) 发送一个值。

然后我希望在我的 ViewModel 中的 collect { }onEach { } 块中收到它。但是,这两个函数都没有被调用。好像什么都没有传递到 ConflatedBroadcastChannel。

有没有人遇到过类似的问题?

确保正确处理接收值。

如果您使用 ConflatedBroadcastChannel,则可以使用 OpenSubscription to get a ReceiveChannel or you can represent it as flow (with asFlow).

注意consumeconsumeEach是终端,它们执行一个动作,然后在块执行后取消通道。参见 this

第一种情况:

val receivingChannel = MyRepository.myConflatedChannel.openSubscription()
// then you can consume values using for example a for loop, e.g.:

launch {
    for (value in receivingChannel) {
        // do something
    }
}

第二种情况:

val receivingFlow = MyRepository.myConflatedChannel.asFlow()

launch {
    receivingFlow.collect {
        // do something
    }
}