使用Immediate scheduler
与不使用?
Observable.create(subscriber -> subscriber.onNext(new Object())).subscribeOn(Schedulers.immediate()).subscribe();
//vs
Observable.create(subscriber -> subscriber.onNext(new Object())).subscribe();
立即调度程序使用SleepingAction
并立即运行它:
this.schedule(new SleepingAction(action, this, execTime));
但它似乎并不是立竿见影的,可能存在延迟:
long delay = this.execTime - this.innerScheduler.now();
Thread.sleep(delay);
我是否正确使用Immediate scheduler
而不使用调度程序之间的差异可能会延迟?
答案 0 :(得分:1)
这是正确的,但这个延迟选项并不是使Schedulers.immediate()有用的原因
Schedulers.immediate()
可用于提供Observable
的同步变体和依赖注入。
例如,有这样的类:
public class ServiceObservable {
private final Scheduler subscribeOnScheduler;
private final Scheduler observeOnScheduler;
public ServiceObservable(Scheduler subscribeOnScheduler, Scheduler observeOnScheduler) {
this.subscribeOnScheduler = subscribeOnScheduler;
this.observeOnScheduler = observeOnScheduler;
}
public Observable<ServiceData> getServiceDataObservable() {
return serviceDataObservable
.observeOn(observeOnScheduler)
.subscribeOn(subscribeOnScheduler);
}
}
您可能希望在生产代码中创建此对象,如下所示:
ServiceObservable serviceObservable = new ServiceObservable(Schedulers.io(), AndroidSchedulers.mainThread());
并在像这样的测试中
ServiceObservable serviceObservable = new ServiceObservable(Schedulers.immediate(), Schedulers.immediate());