I think I figured out the answer to my question. If I have many chained observables and have multiple doOnDispose then depending on where the streams ends is what doOnDispose happens. Whereas setDisposable guarantees that action happens when the disposable is disposed