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
,所以我认为这就是你所使用的。不管怎样,这对我有帮助。谢谢你,达诺!