kotlin - 是否有与 RxJava 的 onDispose 等效的 Kotlin Coroutines Channel?

标签 kotlin rx-java kotlin-coroutines kotlinx.coroutines.channels

如果我扩展 Observable<>在 RxJava 中,我可以覆盖 OnDispose() ,并执行清理,例如清理垃圾收集器的东西。
OnDispose()每当订阅此 Observable<> 时都会调用被处置。

但是,我似乎找不到任何与协程 channel 等效的东西。

我知道 channel.close(),但这不一样。

有什么方法可以传播吗

  • 暂停对 Channel 的协程取消;或
  • 订阅处置/取消 channel ?
  • 最佳答案

    我假设你在谈论 doOnDispose在 RxJava 中。在这种情况下,您将元素发送到 channel 并想知道下游何时有 cancelled这个 channel 。如果你在一个函数中构建你的生产代码,那么你可以简单地使用 try/finally :

    val channel = produce { 
        // channel producing code is here
        try {
            // this example is sending 10 ints, but it can be any other code
            repeat(10) { send(it) }
        } finally {
            // doOnDispose here!
        }
    }
    

    如果您的发送代码分散并且您希望收到取消回调,那么您可以使用 SendChannel.invokeOnClose

    关于kotlin - 是否有与 RxJava 的 onDispose 等效的 Kotlin Coroutines Channel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57055005/

    相关文章:

    java - 组合两个发出不同类型的 Observable

    java - 有条件地订阅 rxJava2 Observable

    android - 如何让 MockWebServer + Retrofit + Coroutines 在同一个调度器中运行

    android - 如何使用 Kotlin Flow 从异步回调中发出数据?

    java - 将 Uni 事件带回调用者线程

    kotlin - 在 Kotlin/JVM 中加载 Kotlin/Native 共享库

    kotlin - Kotlin 如何通过运行示例解释 {} 或 ()

    java - 可连接可观察。用不同的值重播?

    android - 如何将 Kotlin 流程拆分为 2 个流程?

    android - 无法使用 Broadcast Receiver(Kotlin) 更新 UI