如何設置Observable的異步運算符在主線程中運行,而不是在另一個線程中運行。或者至少在我們完成後設置爲在主線程中獲得結果。訂閱主線程
@Test
public void retryWhen() {
Scheduler scheduler = Schedulers.newThread();
Single.just("single")
.map(word -> null)
.map(Object::toString)
.retryWhen(ot ->
ot.doOnNext(t -> System.out.println("Retry mechanism:" + t))
.filter(t -> t instanceof NullPointerException && cont < 5)
.flatMap(t -> Observable.timer(100, TimeUnit.MILLISECONDS,scheduler))
.doOnNext(t -> cont++)
.switchIfEmpty(Observable.error(new NullPointerException())))
.subscribeOn(scheduler)
.subscribe(System.out::println, System.out::println);
// new TestSubscriber()
// .awaitTerminalEvent(1000, TimeUnit.MILLISECONDS);
}
我正在嘗試observerOn和subscribeOn,但都用於設置您想要執行的線程。但在我的情況下,我希望執行或結束它在我運行測試的同一線程中
現在,查看打印的唯一方法就是阻止並等待執行。
問候。
是的,但這只是阻塞,它幾乎等於另一個線程完成。我正在尋找的是一種方式來將發射的物品從另一個線程返回到主線程。我認爲這是我的選擇之一。無論如何謝謝 – paul
你的'@ Test'方法結束之前,你需要'Observable'的結果嗎?除阻塞之外,我沒有看到另一種方法。 –
測試它只是一個概念證明,以顯示我想要的東西。不用擔心,我相信我已經得到了它。我給你一個積極的幫助 – paul