Reputation: 6847
Whats the difference between using Immediate scheduler
and not using?
Observable.create(subscriber -> subscriber.onNext(new Object())).subscribeOn(Schedulers.immediate()).subscribe();
//vs
Observable.create(subscriber -> subscriber.onNext(new Object())).subscribe();
Immediate scheduler uses SleepingAction
and runs it instantly:
this.schedule(new SleepingAction(action, this, execTime));
But it seems it's actually not immediate, there is possible delay:
long delay = this.execTime - this.innerScheduler.now();
Thread.sleep(delay);
So am I right that difference between using Immediate scheduler
and not using schedulers at all is in possible delay?
Upvotes: 3
Views: 2699
Reputation: 2247
That is correct however this delaying option is not what makes Schedulers.immediate() useful
Schedulers.immediate()
might be used for providing synchrounous variants of Observable
with dependency injection.
For example having such class :
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);
}
}
you may want to create this object in production code like this :
ServiceObservable serviceObservable = new ServiceObservable(Schedulers.io(), AndroidSchedulers.mainThread());
and in tests like this
ServiceObservable serviceObservable = new ServiceObservable(Schedulers.immediate(), Schedulers.immediate());
Upvotes: 1