我想要一个像XStream Stream 一样的协程通道

通道的

  • send始终是非阻塞的
  • 没有缓冲区,如果没有接收器,则值“丢失”。
  • 新订户没有获得最后的值。
  • 所有订阅者都接收所有值(例如BroadcastChannel)

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

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

    最佳答案

    不,没有像这样的任何 channel ,请随时访问create an issue

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

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

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

    关于kotlin - 是否存在行为类似于XStream Stream的Kotlin协程 channel ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51208268/

    10-10 19:55