gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:08 25 4
gpt4 key购买 nike

使用 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 和根本不使用调度器之间的区别在于可能的延迟?

最佳答案

这是正确的,但是这个延迟选项并不是使 Schedulers.immediate() 有用的原因

Schedulers.immediate() 可用于通过依赖注入(inject)提供 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());

关于java - 使用立即调度程序和根本不使用调度程序之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com