Как предотвратить запуск списка Flowables, пока предыдущий не закончен - PullRequest
0 голосов
/ 31 мая 2019

У меня есть список Flowables, который работает так:

Flowable.concatArray(Tasks.values().toArray(new Flowable[]{}))
                    .subscribeOn(Schedulers.single())
                    .observeOn(AndroidSchedulers.mainThread())
                    .subscribe();

Мне нужно запускать его каждые 60 секунд, но я не уверен, как проверить, была ли эта цепочка запущена и завершена ранее. Какой механизм я могу использовать для этого? Я использовал этот код, чтобы запустить его один раз последовательно (отсюда Schedulers.single ()), но не уверен, как проверить, что цепочка закончилась.

Один способ, который приходит на ум, - это что-то вроде этого:

private Subject<Integer> TasksStatus = PublishSubject.create();

Observable.combineLatest(Observable.interval(30, TimeUnit.SECONDS), TasksStatus, (TaskPeriod, Status) -> new Object[]{TaskPeriod, Status}).subscribe(
            Parameters -> {
                int Status = (int) Parameters[1];
                if (Status == 2) {
                    TasksStatus.onNext(1);
                    Flowable.concatArray(Tasks.values().toArray(new Flowable[]{}))
                            .subscribeOn(Schedulers.single()).doOnComplete(() -> {
                        Log.d(getClass().getSimpleName(), "Chain has finished");
                        TasksStatus.onNext(2);
                    }).subscribe();
                }
            });

    // Set it as completed at the beginning
    TasksStatus.onNext(2);

Но по какой-то причине он не запускает цепь.

...