是否可以对多个可观察对象进行排队,以便他们在彼此之后重新执行,而不是彼此了解?
假设我在3个不同的类和/或线程中有3个不同的Observable。他们都代表了不同的要求。它们何时执行的顺序取决于哪个观察者有第一个订户(我们不知道)
我想要的是,它们是在某种队列中彼此之后执行的,如果第四个observable正在加入队列,则应将其添加到队列中并在第3个队列之后执行。
是否可以使用一些ootb rx工具?
答案 0 :(得分:0)
根据我对您的问题的理解,您希望构建Observable
Observable
。然后使用concatMap
Observable<Observable<Result>> tasks = ... //build your Observable of Observable
tasks.concatMap(obs -> obs)
.subscribe(resultOfNestedObservable -> /** getting result of Observable **/);
要测试这个想法,请尝试使用Subject
。
Subject<Observable<Observable<Result>> source = PublishSubject.create();
Observable<Observable<Result>> tasks = source;
/*...*/
source.onNext(observable1);
source.onNext(observable2);
答案 1 :(得分:0)
如果我理解正确的问题,你有独立的观察者和独立的订阅者,但你仍然想确保只有一个observable正在“执行”。这可以通过自定义调度程序实现:
ExecutorService exec = Executors.newFixedThreadPool(1, r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
});
Scheduler singleThread = Schedulers.from(exec);
Observable o1 = someObservable.subscribeOn(singleThread);
Observable o2 = someObservable.subscribeOn(singleThread);
Observable o3 = someObservable.subscribeOn(singleThread);
o2.subscribe();
o1.subscribe();
o3.subscribe();
ExecutorService有自己的队列,无论谁先订阅,其他人都将保留在队列中,直到前一个队列完成。