RxJava2 - диапазон () или интервал () - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь понять Hot Observable и Hot Flowable, используя Observable.range(1,1000).publish() и Observable.interval(500, TimeUnit.MILLISECONDS).publish().

  1. Когда я использую range() вместо interval() для создания Observable /Текучий нет необходимости останавливать поток, чтобы получить основной поток, чтобы подождать некоторое время.Main() не выходит, пока диапазон не будет завершен.То же самое не происходит для функции interval().
  2. Кроме того, когда я использую range() вместо interval() для создания Observable / Flowable, я должен сначала подписать Observer / Subscriber перед connect() илииначе никаких предметов не получено.При использовании interval() все работает, как я ожидаю.

Может кто-нибудь объяснить, почему это происходит?Это реализация range() или это я, что я чего-то не понимаю?

Вы можете увидеть примеры для Observable / Observer здесь и для Flowable / Subscriber здесь .

1 Ответ

0 голосов
/ 04 января 2019

Оператор range() холоден и испускает все свои предметы, как только может.Если обратное давление отсутствует, все элементы будут излучаться в первые несколько микросекунд.

Оператор interval() холодный и со временем выдает свои элементы один за другим;первый элемент выдается после определенного интервала.Если вы подпишетесь в главном потоке и ваша основная программа завершит работу, вы не увидите результатов от оператора interval(), потому что не прошло достаточно времени.Это означает, что вам нужно либо заблокировать цепочку наблюдателей, либо предоставить внешнее средство ожидания желаемых результатов.

...