繁体   English   中英

在Observable中发出超时项

[英]Emit item on timeout in Observable

我有两个PublishSubject ,它们为接收和推送作业的队列建模。

我希望能够对从第一个PublishSubject消耗的工作做出反应,但不能在给定的时间范围内(例如10s)放入第二个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()); // ??

经过10秒后,您还没有描述您实际想要做什么。 您是否要重新添加该作业以再次排队? 如果处理时间超过10秒,您是否只想获取信息,或者如果处理时间太长,是否要跳过该工作?

如果要跳过处理该作业并使用一些新的可观察到的内容继续,则可以对每个队列元素进行flatMap并分别使它们timeout

Observable<Job> observableThatWillTriggerOnTimeout = ...
queue.flatMap(job -> dispatchJob(job)
                    .timeout(10, TimeUnit.SECONDS, observableThatWillTriggerOnTimeout)
             )

详细介绍您的情况,如有必要,我将更新我的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM