我想要一个行为类似于XStream的协程通道Stream
send
到通道总是非阻塞的- 如果没有接收器,则没有缓冲区并且值“丢失”。
- 新订户不会获得最后一个值。
- 所有订阅者都会收到所有值(如BroadcastChannel)
我找到的最接近的是ConflatedBroadcastChannel,但是它“记住”了最后一个值,使它像XStream MemoryStream。
是否有解决方法来获得我的确切语义?
我想要一个行为类似于XStream的协程通道Stream
send
到通道总是非阻塞的我找到的最接近的是ConflatedBroadcastChannel,但是它“记住”了最后一个值,使它像XStream MemoryStream。
是否有解决方法来获得我的确切语义?
不,没有这样的频道,请随意创建问题。
您可以拥有的最接近的解决方法是提供一个ConflatedBroadcastChannel
将丢弃现有元素的扩展:
fun <T> ConflatedBroadcastChannel<T>.subscription(): ReceiveChannel<T> {
val subscription = openSubscription()
subscription.poll()
return subscription
}
从消费者的角度来看,这个订阅与 有相同的语义XStream
,但它不符合“没有缓冲区”部分:发送的元素将保留在内存中(~不能被垃圾收集)直到send
调用 next 。