Как позволить моему потоку rx реагировать, если моя подписка удалена? - PullRequest
1 голос
/ 29 марта 2019

У меня есть Flowable поток, который объединяет несколько потоков:

  Flowable
    .empty()
    .concatWith(longOperationA())
    .concatWith(longOperationB())
    .onErrorResumeNext(throwable -> {
      // some cleanup tasks
      return Flowable.error(throwable);
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(mySubscriber);

И longOperationA(), и longOperationB() испускают предметы. Относительно того, какие обстоятельства возникают (возникает ошибка или mySubscriber получает Я хочу, чтобы мой поток действовал по-другому. Случай ошибки покрыт обратным вызовом onErrorResumeNext(), но не в случае, когда mySubscriber становится распоряжаться.

Как я могу изменить свой поток, чтобы выполнить другую задачу, когда абонент удален?

Чтобы получить больше информации об этом, я попытался doOnCancel():

Flowable
  .concatWith(longOperationA())
  .concatWith(longOperationB())
  .doOnCancel(() -> {
    // some cleanup tasks
  })
  .onErrorResumeNext(throwable -> { ...

Однако doOnCancel() вызывается не только тогда, когда mySubscription становится ликвидным, но также когда longOperationA() (и `longOperationB () соответственно) завершены.

Есть ли другой способ, чтобы мой поток реагировал на событие dispose?

1 Ответ

1 голос
/ 29 марта 2019

Вы можете использовать doOnDispose для этого:

http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html#doOnDispose-io.reactivex.functions.Action-

...