有没有与RxJava的onDispose等效的Kotlin Coroutines Channel?

时间:2019-07-16 10:16:07

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

如果我在RxJava中扩展Observable<>,则可以覆盖OnDispose(),并执行清理工作,例如为垃圾收集器清除内容。

每当处置此OnDispose()的任何订阅时,都会调用

Observable<>

但是,我似乎找不到协程频道的任何等效内容。

我知道channel.close(),但这并不相同。

是否有传播途径

  • 将协程暂停到该频道;或
  • 处置/取消订阅频道?

1 个答案:

答案 0 :(得分:1)

我假设您在谈论RxJava中的doOnDispose。在这种情况下,您正在将元素发送到通道,并想知道下游何时拥有cancelled通道。如果您在单个函数中构建生产代码,则只需使用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