Rx java RxJava阻止等待交互但避免争用条件的线程
我完全是RxJava的初学者,如果这是显而易见的,我深表歉意 我想进行一个服务器调用,同步返回一个Rx java RxJava阻止等待交互但避免争用条件的线程,rx-java,observable,Rx Java,Observable,我完全是RxJava的初学者,如果这是显而易见的,我深表歉意 我想进行一个服务器调用,同步返回一个id。我有一个独立的异步事件机制,用于将通知接收回我映射到rxjava流的客户端应用程序。我期待“稍后”收到带有上述id的通知 正常情况下,我当然会异步使用这些通知,但我还想证明我可以阻止,等待相关通知(在前面提到的id上过滤) myObservables是可观察的 客户端应用程序调用远程服务器,获取id 现在我想阻止,直到我收到与我的id相关的通知 通知notn=。。。myObservables(
id
。我有一个独立的异步事件机制,用于将通知接收回我映射到rxjava流的客户端应用程序。我期待“稍后”收到带有上述id
的通知
正常情况下,我当然会异步使用这些通知,但我还想证明我可以阻止,等待相关通知(在前面提到的id
上过滤)
可观察的
id
通知notn=。。。myObservables(notn->notn.getId().equals(id)).toBlocking()…
// This is NOT a idiomatic pattern, only used to demo how you would blocking for
// the Notification
// Avoid race cond by storing up the notifications
ReplaySubject<Notification> mySubject = ReplaySubject.create();
myNotnObservables.subscribe(mySubject);
final Long id = // obtain id via a synchronous request to server.
return mySubject.timeout(10, TimeUnit.SECONDS).
filter(notn -> notn.getId().equals(id)).
toBlocking().first();
//这不是一个惯用模式,仅用于演示如何为
//通知
//通过存储通知来避免竞争条件
ReplaySubject mySubject=ReplaySubject.create();
订阅(mySubject);
final Long id=//通过对服务器的同步请求获取id。
返回mySubject.timeout(10,TimeUnit.SECONDS)。
过滤器(notn->notn.getId().equals(id))。
toBlocking().first();
让我检查一下我是否理解正确:您有两个事件,即id调用的结果和通知,并且您只想在两个事件都已发生时才执行操作。抱歉,否;我更新了这个问题,以澄清检索回id的原始请求是一种传统的阻塞调用(不使用rxjava)。