Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RxJava等待单个事件,RxJava_Java_Reactive Programming_Rx Java2_Reactive - Fatal编程技术网

RxJava等待单个事件,RxJava

RxJava等待单个事件,RxJava,java,reactive-programming,rx-java2,reactive,Java,Reactive Programming,Rx Java2,Reactive,如何等待一个值出现在具有timout的可观察对象上 我正在寻找类似于: Observable<Acknowledgement> acknowledgementObservable; port.send(new Message()); Optional<Acknowledgement> ack = acknowledgementObservable.getFirst(100, TimeUnit.MILLISECONDS); 可观察到的确认为可服务; 发送(新消息());

如何等待一个值出现在具有timout的可观察对象上

我正在寻找类似于:

Observable<Acknowledgement> acknowledgementObservable;
port.send(new Message());
Optional<Acknowledgement> ack = acknowledgementObservable.getFirst(100, TimeUnit.MILLISECONDS);
可观察到的确认为可服务;
发送(新消息());
可选ack=AcknowledgementTobservable.getFirst(100,时间单位为毫秒);

首先,将
可观察的
转换为
可完成的未来
,如中所述:


如果发生超时,它将抛出
TimeoutException

您可以通过添加.timeout()和.onErrorComplete().blockingGet()来完成此操作

因此,在本例中,它将是:

    Acknowledgement ack = acknowledgementObservable
                              .firstElement()
                              .timeout(3, TimeUnit.SECONDS)
                              .onErrorComplete()
                              .blockingGet();

如果超时被命中,ack将为null。

如果发生TimeoutException,这不会导致内存泄漏吗?关于acknowledgementBuffer..getObservable().timeout(100,TimeUnit.Milses).blockingFirst()?你没有告诉任何关于acknowledgementBuffer,所以我不能对这个建议说任何话。对不起,我指的是AcknowledgementToServable.timeout(100,TimeUnit.Milses).blockingFirst()。。
Acknowledgement ack = future.get(100, TimeUnit.MILLISECONDS);
    Acknowledgement ack = acknowledgementObservable
                              .firstElement()
                              .timeout(3, TimeUnit.SECONDS)
                              .onErrorComplete()
                              .blockingGet();