使用立即调度程序和根本不使用调度程序之间的区别

时间:2016-07-28 15:11:19

标签: java rx-java reactive-programming

使用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而不使用调度程序之间的差异可能会延迟?

1 个答案:

答案 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());