我的代码是使用来自RxJava的Observable,它正在观察C盘的变化,
File file = new File("C:\\");
Observable
.interval(1, TimeUnit.SECONDS)
.concatMapIterable(x -> files(file))
.distinct()
.toBlocking()
.subscribe(System.out::println);
代码打印例如新文件夹。
现在我想让它在Spring-Boot应用程序运行时一直运行。 现在,当我在@Test方法中运行它时,它可以工作。 我知道我可以通过JavaSE或Scheduling来做到这一点,但我想这样做。
答案 0 :(得分:1)
toBlocking运算符用于阻止观察者直到发出所有项目,但在您的示例中您正在订阅,因此您可能已经在等待发出所有项目。
您仍然可以使用这种方式,但由于您使用执行管道异步的间隔,您可能希望在主线程中获得结果,因此您可以使用observerOn运算符
Scheduler scheduler;//Main thread
Observable
.interval(1, TimeUnit.SECONDS)
.concatMapIterable(x -> files(file))
.distinct()
.observerOn(scheduler)
.subscribe(System.out::println);
您可以在此处查看一些异步示例https://github.com/politrons/reactive/blob/master/src/test/java/rx/observables/scheduler/ObservableAsynchronous.java