有人知道RxJava 2中的运算符“doAfterTerminate”和“doFinally”有什么区别吗?
最佳答案
区别在于,如果下游除了常规doFinally
或Action
终止路径之外还取消/布置了序列,则onError
将执行提供的onComplete
。这允许通过所有三种方式清理和释放资源。即使onError
或onComplete
信号进行取消竞争,运算符(operator)也保证每个订阅操作仅执行一次。
相反,doAfterTerminate
仅覆盖onError
和onComplete
。
您可以使用doFinally
+ doAfterTerminate
模拟doOnCancel
,但是,如果将其拆分为一个操作,则操作参数可能会同时执行,并且会导致非幂等清除逻辑问题。