2016-07-21 3 views
0

У меня есть холодный наблюдаемый, который производит множество предметов при подписке на калькулятор вычислений и посылает другому, кто делает более тяжелую работу над ними.rxJava stop наблюдаемый при отмене подписки

Проблема в том, что я хочу остановить всю наблюдаемую цепочку, когда я отпишусь от нее.

Для этого существует какой-либо оператор? Я попытался проверить, есть ли у меня подозритель, но в этот момент большинство моих предметов было выпущено.

+0

вызова 'subscriber.unsubscribe()' будет отписать всю цепь. У вас есть целая цепочка? Можете ли вы показать код? –

+0

@DaveMoten, Yeap мои первые наблюдаемые стоп-сигналы, но моя (медленная) функция «flatmap» продолжает работать над элементами, выпущенными до вызова '' unsubscribe''. –

+0

@GuilhermeTorresCastro ваши потоки будут прерваны при отказе подписки - проверьте статус прерывания, пока вы выполняете работу и выходите преждевременно, когда он установлен. –

ответ

1

Создать наблюдаемым, что делает тяжелую работу и может проверить подписку:

obs //emits stuff fast 
    .flatMap(x -> 
    Observable.create(
     sub -> { 
      //frequently check subscription status 
      while (!sub.isUnsubscribed()) { 
      // do some work 
      if (finished) break; 
      } 
      if (!sub.isUnsubscribed()) { 
      sub.onNext(result); 
      sub.onCompleted(); 
      } 
     })) 
     //ensure backpressure compliant 
     .onBackpressureBuffer() 
    ).subscribe(subscriber); 
+0

Я рушаю глупо, потому что не думаю об этом. Благодаря! –

Смежные вопросы