1

我想要一个行为类似于XStream的协程通道Stream

  1. send到通道总是非阻塞的
  2. 如果没有接收器,则没有缓冲区并且值“丢失”。
  3. 新订户不会获得最后一个值。
  4. 所有订阅者都会收到所有值(如BroadcastChannel

我找到的最接近的是ConflatedBroadcastChannel,但是它“记住”了最后一个值,使它像XStream MemoryStream

是否有解决方法来获得我的确切语义?

4

1 回答 1

1

不,没有这样的频道,请随意创建问题

您可以拥有的最接近的解决方法是提供一个ConflatedBroadcastChannel将丢弃现有元素的扩展:

fun <T> ConflatedBroadcastChannel<T>.subscription(): ReceiveChannel<T> {
    val subscription = openSubscription()
    subscription.poll()
    return subscription
}

从消费者的角度来看,这个订阅与 有相同的语义XStream,但它不符合“没有缓冲区”部分:发送的元素将保留在内存中(~不能被垃圾收集)直到send调用 next 。

于 2018-07-06T14:46:14.973 回答