Подтвердить что ты не робот

Что такое "горячие и холодные наблюдаемые"?

Я смотрел видео, и я знаю общие принципы - горячие происходит, даже когда никто не подписывается, холод бывает "по требованию". Кроме того, Publish() преобразует холод в горячий, а Defer() преобразует горячую и холодную.

Но все же я чувствую, что мне не хватает деталей. Вот несколько вопросов, на которые я хотел бы ответить:

  • Можете ли вы дать исчерпывающее определение этих терминов?
  • Есть ли смысл называть "Опубликовать на горячем наблюдаемом" или "Отложить" на холоде?
  • Каковы аспекты конверсий "горячая/холодная" - например, вы теряете сообщения?
  • Существуют ли различия между горячими и холодными определениями для IObservable и IEnumerable?
  • Каковы общие принципы, которые вы должны учитывать при программировании для холода или горячего?
  • Любые другие советы по наблюдению за холодом/холодом?
4b9b3361

Ответ 1

Надеюсь, это поможет.

Можете ли вы дать исчерпывающий    определение для этих терминов?

Смотрите мой пост в блоге: http://leecampbell.blogspot.com/2010/08/rx-part-7-hot-and-cold-observables.html

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

Нет, не то, о чем я могу думать.

Каковы аспекты Hot/Cold    конверсии - вы теряете сообщения,    например?

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

Существуют ли различия между    холодные определения для IObservable и    IEnumerable?

Я действительно не понимаю этот вопрос. Надеюсь, эта аналогия поможет. Я бы сравнил Hot Observable с Eagerly оцененным IEnumerable. т.е. список или массив, как с оценкой Eagerly, так и с населением, даже если никто из них не пересматривает их. Оператор доходности, получающий значения из файла или базы данных, может быть лениво оценен с помощью ключевого слова Yield. Хотя ленивый может быть хорошим, по умолчанию он будет переоценен, если второй перечислитель перейдет через него. Сравнивая их с Observables, Hot Observable может быть событием (нажатие кнопки) или подачей температур; эти события будут происходить независимо от подписки, а также будут доступны, если к одному и тому же наблюдателю будут добавлены несколько подписей. Наблюдаемый. Инвервал - хороший пример наблюдаемого холода. Он начнет генерировать значения только при подписке. Если будет сделано несколько подписей, последовательность будет переоценена, а "события" будут происходить в разное время (в зависимости от времени между подписками).

Каковы общие принципы, которые вы должны учитывать при программировании для холодного или горячего?

Обратитесь к ссылке в первой. Я бы также рекомендовал вам взглянуть на Publsh, который используется вместе с RefCount. Это позволяет вам иметь Lazy-семантику оценки Cold Observables, а также обмен событиями, которые получают Hot Observables.

Другие советы по горячему/холодному    Наблюдаемые?

Потерпи руки и играй с ними. После того, как вы прочтете о них более 30 минут, время, проведенное с ними, намного более продуктивно для вас, чем чтение больше:)

Ответ 2

Горячие наблюдаемые - это те, которые толкаются, даже когда вы не подписаны на наблюдаемые. Как перемещение мыши, или тикеры таймера или что-то в этом роде. Холодные наблюдаемые - это те, которые начинают толкать, только когда вы подписываетесь, и они начинаются, если вы снова подписываетесь.

Ответ 3

Не претендуя на то, чтобы дать исчерпывающий ответ, я хотел бы обобщить в простейшей форме то, что я узнал с момента этого вопроса.

Горячий наблюдаемый - точное соответствие для события. В событиях значения обычно подаются в обработчик, даже если ни один из абонентов не прослушивает. Все подписчики получают один и тот же набор значений. Из-за следования шаблону "событие" горячие наблюдаемые легче понять, чем холодные.

Холодный наблюдаемый также похож на событие, но с твистом - событие Cold наблюдаемое не является свойством для общего экземпляра, оно является свойством объекта, созданного из factory каждый раз, когда кто-то подписывается. Кроме того, подписка начинает производство значений. Из-за вышеизложенного несколько подписчиков изолированы и каждый получает свой собственный набор значений.

Самая распространенная ошибка, которую делают новички RX, - это создание холодного наблюдаемого (ну, думая, что они создают холодный наблюдаемый), используя некоторые переменные состояния внутри функции (т.е. накопленное общее количество), и не завершая ее в оператор .Defer(). В результате несколько подписчиков разделяют эти переменные и вызывают побочные эффекты между ними.

Ответ 4

наблюдаемый

Концептуально, наблюдаемый - это просто оболочка для некоторых данных или источника событий, предоставляющая некоторый удобный интерфейс для обработки источника как потока данных, который обновляет свои значения в режиме реального времени.

Наблюдаемая холод

В "холодной" версии источник не активен и его можно сравнить с планом, классами или прототипами. Следовательно, наблюдаемое ничего не производит. Как ожидающий или приостановленный поток. Это делает чистое значение, которое вы можете безопасно передать чистой функции. Хорошим примером является приостановленный счетчик, который всегда начинается с 1 при активации.

"Подписка" на "холодное наблюдение" означает две вещи: создание (или разветвление) активного экземпляра потока данных и присоединение подписчика. Первая часть похожа на создание объектов из класса. Вторая часть является действительной подпиской и сама по себе не имеет ничего общего с первой частью.

Горячая наблюдаемая

"Горячая наблюдаемая" - это уже запущенный экземпляр. Как объект, созданный из прототипа и готовый к использованию. И подписка включает в себя только фактическое присоединение наблюдателя. Активация не требуется.