Краткий ответ:
IConnectableObservable
представляет ожидающих наблюдаемых в горячем режиме, которыми можно поделиться с несколькими подписчиками. Вызов IConnectableObservable.Connect()
вызывает изменение к горячему (подписывается на наблюдаемый источник холода)
Длинный ответ:
A холодно наблюдаемый (например, Observable.Range
) воспроизводит последовательность для каждого подписчика. Это аналогично секундомеру, где каждому подписчику дают свой собственный секундомер. Подписчик запускает секундомер, подписываясь, и секундомер останавливается (и сбрасывается), как только наблюдатель прекращает наблюдать.
A hot observable делит последовательность между всеми подписчиками. Это аналогично тому, что у нас один секундомер, и всем подписчикам дается одинаковое время, независимо от того, когда они начали смотреть.
IObservable.Publish
преобразует наблюдаемую холодность в наблюдаемую горячую, но возвращает IConnectableObservable
. Это позволяет подписчикам подписываться на (один) секундомер до его запуска. Вызов IConnectableObservable.Connect()
запускает секундомер. Удаление возвращаемого значения Connect()
останавливает секундомер.
Стоит отметить, что некоторые наблюдаемые источники являются горячими по своей природе. Например, события мыши могут запускаться независимо от того, подписаны ли мы на них. В этом сценарии все, что можно подключить для наблюдения, - это общая подписка на одно событие.