有人知道RxJava 2中的运算符“doAfterTerminate”和“doFinally”有什么区别吗?

最佳答案

区别在于,如果下游除了常规doFinallyAction终止路径之外还取消/布置了序列,则onError将执行提供的onComplete。这允许通过所有三种方式清理和释放资源。即使onErroronComplete信号进行取消竞争,运算符(operator)也保证每个订阅操作仅执行一次。

相反,doAfterTerminate仅覆盖onErroronComplete

您可以使用doFinally + doAfterTerminate模拟doOnCancel,但是,如果将其拆分为一个操作,则操作参数可能会同时执行,并且会导致非幂等清除逻辑问题。

10-02 09:30