1

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

OnDispose()每当处理对此的任何订阅时都会调用Observable<>

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

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

有什么方法可以传播吗

  • 暂停对 Channel 的协程取消;或者
  • 订阅处置/取消频道?
4

1 回答 1

2

我假设你在谈论doOnDisposeRxJava。在这种情况下,您正在向通道发送元素,并且想知道下游何时取消了通道。如果您在单个函数中构建您的生产代码,那么您可以简单地使用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

于 2019-07-16T14:49:54.433 回答