我有两个PublishSubject
,它们为接收和推送作业的队列建模。
我希望能够在给定的时间范围内(例如10s)对第一个PublishSubject
消耗掉的工作,而不是第二个PublishSubject
消耗的工作做出反应:
final Subject<Job> queue = PublishSubject.<Job>create().toSerialized();
final Subject<Job> done = PublishSubject.<Job>create().toSerialized();
// this is probably wrong already since I am consuming items from queue
queue.subscribe(done::onNext);
final Observable<Job> timeOut = queue.timeout(10, SECONDS, Observable.empty()); // ??
答案 0 :(得分:0)
您还没有描述10秒钟后您实际想要做什么。 您是否要重新添加该作业以再次排队?如果要花费10秒钟以上的时间来获取信息,还是要花费太长时间就跳过该工作?
如果您想跳过处理该作业并以一些新的可观察到的状态继续进行
您可以flatMap
队列的每个元素,分别timeout
。
Observable<Job> observableThatWillTriggerOnTimeout = ...
queue.flatMap(job -> dispatchJob(job)
.timeout(10, TimeUnit.SECONDS, observableThatWillTriggerOnTimeout)
)
详细介绍您的情况,如有必要,我将更新答案