RxJava, в чем разница между запуском и созданием?

Я смотрю на этих двух операторов, которые, похоже, выполняют одну и ту же работу:

http://reactivex.io/documentation/operators/start.html http://reactivex.io/documentation/operators/create.html

Создать только новую версию запуска? Потому что мне также не удается найти метод запуска нигде в более новых версиях RxJava.


person bruce_ricard    schedule 17.07.2015    source источник


Ответы (1)


Это два разных оператора, и они также входят в разные артефакты.


Этот вопрос помечен rx-java поэтому я буду говорить только об этой языковой реализации. Другой язык может иметь другие соглашения, упаковку, наименования и т. д.


Создайте

Observable.create — это действительно способ создать наблюдаемый.

Однако вы заметите, что переданный тип — OnSubscribe, который вызывается при подписке. Таким образом, если тип, который вы передали, не является активным (поток, излучающий что-то, или код подключен к какому-либо активному источнику, например сети), никакая фактическая работа не будет выполняться, пока не появится подписчик.

Например, в зависимости от способа создания наблюдаемого объекта, он может создавать или не создавать один и тот же элемент, он может создавать один, несколько элементов или не создавать ни одного элемента с неопределенной скоростью.

Источник артефакта ⇨ https://github.com/ReactiveX/RxJava

Начало

Async.start также создает наблюдаемое, но есть заметные отличия: Function вызывается немедленно, независимо от подписки, и создает один элемент. Также произведенный элемент будет повторно использоваться, если произойдет несколько подписок. Наконец, функция будет выполнена в планировщике вычислений.

Источник артефакта ⇨ https://github.com/ReactiveX/RxJavaAsyncUtil

person Brice    schedule 18.07.2015
comment
Итак, из того, что вы здесь говорите, оператор запуска создает асинхронный объект, но оператор создания НЕ является асинхронным, поскольку вычисление начинается только во время вызова. Есть ли способ создать Observable с несколькими значениями, которые были бы асинхронными? - person bruce_ricard; 20.07.2015
comment
@double_squeeze Да, верно. Хотя я не уверен, что именно вы подразумеваете под асинхронностью. Но если вы имеете в виду что-то вроде потока, который может создавать несколько элементов с разной скоростью, это возможно несколькими способами, для объяснения которых потребуется гораздо больше, чем комментарий. Задайте еще один вопрос на SO и отправьте мне ответный пинг здесь;) - person Brice; 20.07.2015
comment
Я чуть было не спросил, стоит ли мне создать другую тему для этого :) - person bruce_ricard; 20.07.2015