title: How to use IObservable<T>.Subscribe(Action<T>) so that each observed value is actioned on a new thread?
body: <p>I'm using the latest Rx2 from NuGet. In example code below, the subscription is processed on a new thread and doesn't block the generation of new values. That's all good. However, why are the values generated by the observable processed on the new thread sequentially?</p>
  
  <pre><code>static void Main(string[] args)
  {
    printThreadId("Started");
    var observable = Observable.Generate&lt;int, int&gt;(
        0,
        x =&gt; {
          printThreadId("Comparing " + x);
          return x &lt; 5; },
        x =&gt; {
          printThreadId("Incrementing " + x);
          return x + 1; },
        x =&gt; {
          printThreadId("Selecting " + x);
          return x; },
        NewThreadScheduler.Default
    );
  
    var disp = observable
      .ObserveOn(NewThreadScheduler.Default)
      .Subscribe(state =&gt;
      {
        printThreadId("Processing " + state);
        Thread.Sleep(1000);
      });
  
    Console.ReadLine();
    disp.Dispose();
  }
  
  static Action&lt;string&gt; printThreadId = (prefix) =&gt; Console.WriteLine("{0} on [Worker.{1}]", prefix, Thread.CurrentThread.ManagedThreadId);
  </code></pre>
  
  <p>The above code takes around 5 seconds to complete. I expected each action to be executed on a new thread and this is not happening.</p>
  
  <p>Code below schedules a new task and the whole process completes in a little over 1 second.</p>
  
  <pre><code>var disp = observable
   .ObserveOn(NewThreadScheduler.Default)
   .Subscribe(state =&gt;
   {
     printThreadId("Processing " + state);
     NewThreadScheduler.Default.Schedule(() =&gt;
     {
        printThreadId("Long running task " + state);
        Thread.Sleep(1000);
     });
   });
  </code></pre>
  
  <p>Is there a better way to schedule long running tasks to run concurrently using <code>ObserveOn</code> and <code>Subscribe</code>?</p>