Short answer:
IConnectableObservable
represents a pending hot observable that can be shared with multiple subscribers. Calling IConnectableObservable.Connect()
causes the change to hot (subscribes to the cold source observable)
Long answer:
A cold observable (like Observable.Range
) replays the sequence for each subscriber. It s analagous to a stopwatch, where every subscriber is given their own stopwatch. The subscriber starts the stopwatch by subscribing, and the stopwatch stops (and resets) once the observer stops observing.
A hot observable shares the sequence between all subscribers. It s analagous to there being one stopwatch and all subscribers are given the same time readout, regardless of when they started watching.
IObservable.Publish
converts a cold observable into a hot observable, but returns an IConnectableObservable
. This enables subscribers to subscribe to the (single) stopwatch before it starts. Calling IConnectableObservable.Connect()
starts the stopwatch. Disposing the Connect()
return value stops the stopwatch.
It s worth noting that some observable sources are hot by nature. For example, mouse events can fire regardless of whether we are subscribed to them. All a connectable observable would do in this scenario is a share a single event subscription.