Closed
Description
When using Single.subscribe(onSuccess, onError) , the returned Disposable is not disposed after terminal event. However , for Observable, Flowable, Maybe and Completable , the results are all disposed.
Here is the test code:
@Test
public void testDisposable() throws Exception {
Disposable disposable;
disposable = Single.just(1).subscribe(
next -> System.out.println("Single Success"),
error -> System.out.println("Single Error")
);
System.out.println("Single Disposed: " + disposable.isDisposed());
disposable = Observable.just(1).subscribe(
next -> System.out.println("Observable Next"),
error -> System.out.println("Observable Error"),
() -> System.out.println("Observable Complete")
);
System.out.println("Observable Disposed: " + disposable.isDisposed());
}
Output:
Single Success
Single Disposed: false
Observable Next
Observable Complete
Observable Disposed: true
I found the Disposeable not lazySet to DISPOSED in ConsumerSingleObserver compared with LambdaObserver. Is this a bug or there are some special reasons to do this?
ConsumerSingleObserver
@Override
public void onSuccess(T value) {
try {
onSuccess.accept(value);
} catch (Throwable ex) {
Exceptions.throwIfFatal(ex);
RxJavaPlugins.onError(ex);
}
}
LambdaObserver
@Override
public void onComplete() {
if (!isDisposed()) {
lazySet(DisposableHelper.DISPOSED);
try {
onComplete.run();
} catch (Throwable e) {
Exceptions.throwIfFatal(e);
RxJavaPlugins.onError(e);
}
}
}
RxJava 2.0.6