RxJava超时,计时器-如何停留在上游线程上?

时间:2018-08-23 22:34:59

标签: rx-java reactive-programming rx-java2

我有一个在其线程上发出的简单流。然后我有timeout(),但是默认情况下会发出Computation。有没有办法将与上游发出的线程传递给timeout()因此它不会创建不必要的新线程吗?

scanResults()
     .subscribeOn(Schedulers.io())
     // part of library
     .timeout(5, TimeUnit.SECONDS, Schedulers.io()), Obserable.just(specialValue())

我相信这会产生2个线程,对吧?

是否可以通过某种方式将当前线程的调度程序传递给超时参数,以便它停留在上游线程上?

如果有意义,也许像timeout(5, TimeUnit.SECONDS, { Scheduler(Thread.currentThread())},所以它仅是单线程

1 个答案:

答案 0 :(得分:0)

无法执行此操作,因为您必须插入要由计时器中断的monad(Observable)中。在单个线程中实现此类行为的方式如下:

val list = listOf(Task1, Task2, Task3)
while(checkTimer() && list.isEmpty().not()) {
    list.takeFirst().execute()
}

在一个monad中仅封装了一个操作的情况下,如何在不中断另一个线程的情况下检查时间?