你如何等待一个值出现在一个可以观察到的时间点上?
我在找这样的东西:
Observable<Acknowledgement> acknowledgementObservable;
port.send(new Message());
Optional<Acknowledgement> ack = acknowledgementObservable.getFirst(100, TimeUnit.MILLISECONDS);发布于 2021-04-18 15:44:55
可以通过添加.timeout()和.onErrorComplete() .blockingGet()来做到这一点。
因此,在这个例子中,应该是:
Acknowledgement ack = acknowledgementObservable
.firstElement()
.timeout(3, TimeUnit.SECONDS)
.onErrorComplete()
.blockingGet();如果超时被击中,ack将为null。
发布于 2019-08-16 17:11:06
首先,将Observable转换为CompletableFuture,如在可实现的未来与可观察的之间的转换中所述
Observable<Acknowledgement> acknowledgementObservable;
port.send(new Message());
CompletableFuture<T> future = new CompletableFuture<>();
acknowledgementObservable
.doOnError(future::completeExceptionally)
.single()
.forEach(future::complete);然后,使用超时值等待事件:
Acknowledgement ack = future.get(100, TimeUnit.MILLISECONDS);如果发生超时,它将抛出TimeoutException。
https://stackoverflow.com/questions/57523882
复制相似问题