title: Why is Observable.Finally not called when Observable.Generate finishes?
body: <p>I needed to alternate between two states with each state having a different interval time.<br>
  The best way I could think of doing this was to use Reactive Extensions' Observable.Generate
  which is pretty awsome.</p>
  
  <p>From what I read on msdn and other sites, Observable.Finally() should fire if the
  observable "terminates gracefully or exceptionally".  I was testing the following code
  (in LINQPad) to see how it works, but I can not get .Finall() to fire at all.</p>
  
  <pre><code>var ia = TimeSpan.FromSeconds(1);
  var ib = TimeSpan.FromSeconds(.2);
  var start = DateTime.UtcNow;
  var ct = new CancellationTokenSource();
  
  var o = Observable.Generate(
      true,
  //    s =&gt; !ct.IsCancellationRequested,
      s =&gt; (DateTime.UtcNow-start) &lt; TimeSpan.FromSeconds(3) &amp;&amp; !ct.IsCancellationRequested,
      s =&gt; !s,
      s =&gt; s ? "on" : "off",
      s =&gt; s? ib : ia)
  //    .TakeUntil(start+TimeSpan.FromSeconds(3))
      .Concat(Observable.Return("end"));
  
  
  o.Subscribe( s=&gt; s.Dump(), ct.Token);
  var t = o.ToTask(ct.Token);
  
  
  t.ContinueWith(x =&gt; x.Dump("done"));
  o.Finally(() =&gt; "finallY".Dump()); // never gets called?
  
  Thread.Sleep(10000);
  ct.Cancel();
  </code></pre>
  
  <p>If I make Thread.Sleep 10s, the observable sequence finishes and the Task.ContinueWith fires, 
  but not .Finally().</p>
  
  <p>If I make Thread.Sleep 2s, the observable sequence is canceled and the Task.ContinueWith again fires,
  but not .Finally().</p>
  
  <p>Why not?</p>