RxJava как создать интервал, в котором несколько заданий выполняются с разной задержкой?

#android #rx-java #reactive-programming #android-threading

#Android #rx-java #реактивное программирование #android-многопоточность

Вопрос:

Я очень новичок в RxJava, поэтому мой вопрос может быть совершенно глупым, но я не мог понять, как это сделать.

Итак, у меня есть N заданий, которые реализуют следующий интерфейс

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

Чего я хочу добиться, так это функциональности, подобной таймеру, которая вызывает эти Worker job() функции s каждый раз, когда interval() проходит время.

Что я пробовал до сих пор

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

Это сработало нормально, задания выполнялись асинхронно по истечении заданного времени.

Но это выполняется только один раз. Я понимаю, что мне нужно interval() как-то использовать оператор, но я не мог понять это.

Заранее спасибо

Ответ №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() вызовы будут выполняться в неожиданном порядке