0
Observable
と同じスレッドでsubscribeOn
アクションを実行する必要があります。私は解決策を見つけましたが、それは最良ではないようです。基本的に私は、同じ初期observable
ためscheduler
とobservable
を使用したdoOnSubscribe
リターン:Observableと同じスレッドでsubscribeOnアクションを実行する
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