【问题标题】:RxJava how to create an interval that has multiple jobs executed at different delay?RxJava如何创建一个以不同延迟执行多个作业的间隔?
【发布时间】:2021-02-24 19:00:20
【问题描述】:

我对 RxJava 很陌生,所以我的问题可能完全是愚蠢的,但我不知道该怎么做。

所以我有 N 个作业实现以下接口

interface Worker {
  int interval();
  void job();
}

我想要实现的是一个类似计时器的功能,每次经过interval() 的时间后,它都会调用这些Workers job() 函数。

到目前为止我已经尝试过什么

Observable.fromArray(worker1, worker2)
                .flatMap(worker -> Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS))
                .subscribe(Worker::job);

这很好,工作在给定时间过去后异步执行。

但这只执行了一次。我知道我需要以某种方式使用 interval() 运算符,但无法理解它。

提前致谢

【问题讨论】:

    标签: android rx-java reactive-programming android-threading


    【解决方案1】:

    如果我正确理解你的问题,你需要这样做:

    Observable.fromArray(worker1, worker2)
        .flatMap { worker ->
            Observable.interval(worker.interval(), TimeUnit.SECONDS)
                .flatMap { Observable.just(worker).delay(worker.delay(), TimeUnit.SECONDS) }
         }
         .subscribe(Worker::job)
    

    您应该注意到,在此实现中,您的 worker.job() 调用将以意外的顺序进行

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 1970-01-01
      • 2013-03-15
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2016-04-16
      相关资源
      最近更新 更多