Выполнение действия subscribeOn в том же потоке, что и Observable

Мне нужно запустить действие subscribeOn в том же потоке, что и Observable. Я нашел решение, но, похоже, оно не самое лучшее. В основном я использую один и тот же scheduler для начальных observable и observable, который возвращает doOnSubscribe:

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]

Есть ли лучший или, может быть, более стандартный способ добиться этого?


person eleven    schedule 30.06.2016    source источник
comment
Зачем вам это нужно? Существует ли локальная информация о потоке за пределами наблюдаемой цепочки? Также есть Scheduler.immediate()   -  person Tassos Bassoukos    schedule 30.06.2016
comment
Это единственный способ вернуться к тому же потоку в 1.x. Стандартные планировщики распределяют рабочие потоки, и нет никакой гарантии, что вы получите то же самое при применении планировщиков.   -  person akarnokd    schedule 30.06.2016


Ответы (1)


Как отметил akarnokd, решение, которое я упоминаю в вопросе, только одно.

person eleven    schedule 30.06.2016