title: Keeping references to `IDisposable` when using the Reactive Extensions for .NET: always, never, or sometimes?
body: <p>Up until now I have zealously kept every reference to the <code>IDisposable</code> returned from any <code>.Subscribe(...)</code>, <code>.Connect(...)</code>, etc, method within Rx. I've done this because of my fear that a garbage collections will dispose the disposable if I don't keep the reference.</p>
  
  <p>However, I did a test in LINQPad where I did some calls <code>GC.Collect()</code> on a <code>.Subscribe(...)</code> where I didn't keep the reference and guess what? The world didn't end and the subscription ran to completion.</p>
  
  <p>In further testing I found that my subscription was disposed of immediately after <code>.OnComplete()</code> without my intervention.</p>
  
  <p>This leads me to understand that, at least for <code>.Subscribe(...)</code>, that the only reason to keep a reference to the subscription is to force the subscription to end before its normal completion. It's more like a cancellation token.</p>
  
  <p>So are all Rx disposables used for cancelling rather than keeping alive?</p>
  
  <p>What, then, are the rules for hanging on to an <code>IDisposable</code>?</p>