首页 > 解决方案 > RxJava 2 - 处理时省略间隔发射

问题描述

假设我有以下任务链要定期执行。

Observable.interval(0, 10, TimeUnit.SECONDS)
    .flatMapIterable(l -> provider.getAssets())
    .map(renderer::render)
    .map(converter::convert)
    .subscribe(provider::publish)

尽管每项任务可能需要 10 秒以上才能完成。我想getAssets()每 10 秒调用一次进程,但不想赶上自处理开始以来发生的排放。我该如何省略它们?谢谢。

标签: javarx-javarx-java2

解决方案


我认为您可以通过添加“进行中标志”来解决此问题。在您的情况下,它看起来像这样:

AtomicBoolean inProgress = new AtomicBoolean(false);
Observable.interval(0, 10, TimeUnit.SECONDS)
    .filter(emission -> !inProgress.get())
    .flatMapIterable(l -> provider.getAssets())
    .map(renderer -> {
        // set to true when processing started
        inProgress.set(true);
        return renderer.render();
    })
    .map(converter::convert)
    .subscribe(provider -> { 
        // set to false when processing finished
        provider.publish();
        inProgress.set(false);
    });

推荐阅读