0
Мне нужно запустить subscribeOn
action в той же теме, что и Observable
. Я нашел решение, но, похоже, это не самое лучшее. В основном я использую тот же scheduler
для начальной observable
и observable
который doOnSubscribe
возвращается:Выполнение действия subscribeOn в той же теме, что и Observable
Scheduler singleThreadScheduler = Schedulers.from(Executors.newSingleThreadExecutor());
Observable<Object> obs = Observable.create(subscriber -> {
System.out.println("onNext at: " + Thread.currentThread());
subscriber.onNext(new Object());
subscriber.onCompleted();
}).subscribeOn(singleThreadScheduler).observeOn(Schedulers.newThread());
obs = obs.doOnSubscribe(() -> System.out.println("doOnSubscribe at: " + Thread.currentThread())).subscribeOn(singleThreadScheduler);
obs.subscribe(o -> {
System.out.println("result at: " + Thread.currentThread());
});
Вход:
doOnSubscribe at: Thread[pool-1-thread-1] //runs on the same thread
onNext at: Thread[pool-1-thread-1] //runs on the same thread
result at: Thread[RxNewThreadScheduler-1]
Есть ли лучше или, может быть более стандартным способом для достижения этой цели?
Зачем вам это нужно? Существует ли локальная информация за пределами наблюдаемой цепи? Кроме того, есть 'Scheduler.immediate()' –
Это единственный способ вернуться в тот же поток в 1.x. Стандартные планировщики передают рабочие потоки, и нет гарантии, что вы получите то же самое при применении планировщиков. – akarnokd