是否存在行为类似于XStream Stream的Kotlin协程通道?

时间:2018-07-06 10:22:59

标签: kotlin kotlinx.coroutines

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

  1. send始终保持无障碍状态
  2. 没有缓冲区,如果没有接收者,则值“丢失”。
  3. 新订户获得最后一个值。
  4. 所有订阅者都收到所有值(例如BroadcastChannel

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

是否有一种变通方法来获取我的确切语义?

1 个答案:

答案 0 :(得分:1)

不,没有这样的渠道,随时欢迎create an issue

您可以使用的最接近的解决方法是在ConflatedBroadcastChannel上提供扩展名,该扩展名将丢弃现有元素:

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

从使用者的角度来看,此订阅与XStream具有相同的语义,但是不符合“没有缓冲区”部分:已发送的元素将保留在内存中(〜不能为垃圾回收),直到调用下一个send