RxJava阻塞了一个等待交互但避免竞争条件的线程

时间:2016-02-11 10:55:11

标签: rx-java observable

我是RxJava的初学者,如果这很明显就道歉......

我想进行一次服务器调用,同步返回id。我有一个独立的异步事件机制,用于接收回我的客户端应用程序的通知,我将其映射到rxjava流。我期待一个通知"稍后"与前面提到的id

通常情况下,我当然会异步使用这些通知,但我也想证明我可以阻止,等待相关的通知(过滤前面提到的id)。

  1. myObservables是Observable<Notification>
  2. 客户端应用程序调用获取id
  3. 的远程服务器
  4. 现在我想阻止,直到收到与我的身份相关的通知。就像是 Notification notn = ... myObservables(notn -> notn.getId().equals(id)).toBlocking() ....
  5. 我认为必须有一个简单的模式,例如步骤#1中的一种方法是从该点开始排队通知以避免在我们开始等待之前通知已经到达的#3处的竞争条件?

    编辑:我遵循似乎有效的方法。这是明智的还是有更好的方式......

    // 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();  
    

0 个答案:

没有答案