Rx java 阻止进度,直到发出所有可观察值
我有缓慢可见的发射弦。 我必须阻止进程,直到发出所有值。 比如:Rx java 阻止进度,直到发出所有可观察值,rx-java,rx-java2,vert.x,Rx Java,Rx Java2,Vert.x,我有缓慢可见的发射弦。 我必须阻止进程,直到发出所有值。 比如: myObservable.subscribe( a2 -> dummy.add(a2), e -> log.error(e), () -> log.info("completed") ); //wait till all values collected try { Thread.sleep(30
myObservable.subscribe(
a2 -> dummy.add(a2),
e -> log.error(e),
() -> log.info("completed")
);
//wait till all values collected
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return dummy;
如何以更优雅的方式实现^result?您可以使用以下方法:
myObservable.blockingSubscribe(
a2->虚拟。添加(a2),
e->日志错误(e),
()->log.info(“已完成”)
);
//直到可观测的结束,你才能到达这里。
返回假人;
这将阻止调用者线程,直到可观察
终止
不过,使用时要小心。根据应用程序的线程模型,最终可能会阻止应用程序中不打算阻止的部分,如文档中所述:
请注意,调用此方法将阻止调用线程,直到
上游正常终止或出现错误。所以说,
从特殊线程(如Android主线程或
不建议使用Swing事件分派线程
例如,从Vert.x EventLoop线程执行此操作(我提到这一点是因为您在问题中包含了该标记)将导致阻止事件循环线程,这是不好的。感谢帮助@dano。
似乎rx.Observable没有blockingSubscribe()。
最终得到了这个解决方案:
myObservable
.toBlocking()
.subscribe(
a2 -> dummy.add(a2),
e -> log.error(e),
() -> log.info("completed")
);
为什么要添加vert.x标记?啊,你标记了你的问题
rx-java2
,所以我认为这就是你所使用的。不管怎样,这对我有帮助。谢谢你,达诺!