delay
运算符将所有项目延迟指定的时间。我想延迟和缓冲项目只有前N秒。 N秒后应该没有延迟。我需要在以下代码中执行此操作。
private Emitter<Work> workEmitter;
// In the constructor.
Flowable.create(
(FlowableOnSubscribe<Work>) emitter -> workEmitter = emitter.serialize(),
BackpressureStrategy.BUFFER)
.observeOn(Schedulers.from(executor))
.subscribe(work -> process(work));
// On another thread, as work comes in, ...
workEmitter.onNext(t);
我想要做的是在前N秒内推迟处理工作,但在此之后不推迟。我尝试了delaySubscription,但在延迟期间它workEmitter
为null
。我想这样做的原因是在初始阶段使CPU可用于其他重要工作。
答案 0 :(得分:1)
您可以使用UnicastProcessor
并在延迟一段时间后订阅它:
FlowableProcessor<Work> processor = UnicastProcessor.<Work>create().toSerialized();
processor.delaySubscription(N, TimeUnit.SECONDS)
.observeOn(Schedulers.from(executor))
.subscribe( work -> process(work));
// On another thread, as work comes in, ...
processor.onNext(t);
UnicastProcessor
将保留缓冲工作项,直到delaySubscription
的时间过去,然后切换到它。
答案 1 :(得分:0)
您可以延迟创建observable,然后订阅它。
Decimal('1.100000000000000088817841970012523233890533447265625')
在N秒过去之前,这不会启动观察链。