Closed

Description
Code:
import rx.Observable;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func0;
import rx.functions.Func1;
class Main {
public static void main(String[] args) {
Observable.using(
new Func0<String>() {
@Override
public String call() {
System.out.println("Calling resourceFactory");
return "resourceFactory";
}
},
new Func1<String, Observable<String>>() {
@Override
public Observable<String> call(String str) {
System.out.println("Calling observableFactory");
return Observable.just("observableFactory");
}
},
new Action1<String>() {
@Override
public void call(String s) {
System.out.println("Calling disposeAction");
throw new RuntimeException("disposeAction");
}
}
).subscribe(
new Action1<String>() {
@Override
public void call(String s) {
System.out.println("onNext: " + s);
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable e) {
System.out.println("onError: " + e.getMessage());
}
},
new Action0() {
@Override
public void call() {
System.out.println("onComplete");
}
}
);
}
}
Output:
Calling resourceFactory
Calling observableFactory
onNext: observableFactory
onComplete
Calling disposeAction
This program finishes without error, and the RuntimeException
thrown in dispose action is silently ignored.