As I've previous discussed, exactly when something starts in Rx is a bit of an issue. Sometimes, for instance when dealing with network traffic, we need to do some work before we receive any more data. We could simply buffer it, but that runs the risk of the long queue problem. So, we need some way of telling an observable to start, stop and resume. IConnectableObservable gives us exactly the interface that we want here: the Connect method represents Start/Resume, with disposing of its return value represents Pause. Obviously, if extra values are produced, we need them buffered until...