Я планирую Action0, который запускает функцию, на которую я хочу подписаться. В настоящее время я не могу придумать лучшего способа сделать это, кроме звонка toBlocking().single(). Более того, я также хочу снова запланировать Action0 после его завершения.

Должен быть более идиоматический способ сделать это. Могу ли я также позволить себе утечку памяти, не обрабатывая Subscription, возвращаемый .schedule()?

worker.schedule(new Action0() {
        @Override
        public void call() {
            try {
                consumer.doSomething().toBlocking().single();
            } finally {
                worker.schedule(this);
            }
        }
});

FWIW Я застрял с RxJava 1.

1
Ben Smith 15 Июн 2018 в 13:26

1 ответ

Лучший ответ

В мире RxJava вы, вероятно, не захотите использовать явные операции schedule().

Лучший способ выполнить то, что вы описываете:

Observable.fromCallable( consumer.doSomething() )
  .repeat()
  .subscribeOn( scheduler )
  .subscribe();

Это будет вызывать doSomething() снова и снова, игнорируя вывод. Оператор repeat повторно подпишется, когда вызов будет выполнен.

1
Bob Dalgleish 15 Июн 2018 в 13:52