Rx java 无法测试rxjava的合并运算符
我想使用rxjava 1测试Rx java 无法测试rxjava的合并运算符,rx-java,Rx Java,我想使用rxjava 1测试merge操作符,使用: Observable<Object> o1 = Observable.create((t) -> { t.onNext("1"); try { Thread.sleep(5000); } catch (Exception e) { e.printStackTrace(); } t.onNe
merge
操作符,使用:
Observable<Object> o1 = Observable.create((t) -> {
t.onNext("1");
try {
Thread.sleep(5000);
} catch (Exception e) {
e.printStackTrace();
}
t.onNext("2");
t.onCompleted();
});
Observable<Object> o2 = Observable.create((t) -> {
t.onNext("a");
t.onNext("b");
t.onCompleted();
});
o1.mergeWith(o2).subscribe(System.out::println);
Observable o1=可观察。创建((t)->{
t、 onNext(“1”);
试一试{
睡眠(5000);
}捕获(例外e){
e、 printStackTrace();
}
t、 onNext(“2”);
t、 未完成();
});
可观察o2=可观察。创建((t)->{
t、 onNext(“a”);
t、 onNext(“b”);
t、 未完成();
});
o1.mergeWith(o2).subscribe(System.out::println);
我希望输出是:1ab2
,但实际是12ab
那么,为什么呢?因为
merge
以同步方式订阅可观察对象。由于第一个可观察对象没有显式地将工作移动到后台线程,create(…)
的主体也同步执行
这意味着,当订阅o1
时,它必须在订阅下一个可观察对象之前在create(…)
调用中完全完成主体
使用subscribeOn(Schedulers.computation())
显式地在后台运行可观察对象可以解决这个问题
请参阅:有关调度程序的更多信息,因为
合并以同步方式订阅可观察对象。由于第一个可观察对象没有显式地将工作移动到后台线程,create(…)
的主体也同步执行
这意味着,当订阅o1
时,它必须在订阅下一个可观察对象之前在create(…)
调用中完全完成主体
使用subscribeOn(Schedulers.computation())
显式地在后台运行可观察对象可以解决这个问题
请参阅:有关调度程序的更多信息请注意,即使subscribeOn也可能不会产生预期的交织。请注意,即使subscribeOn也可能不会产生预期的交织。