title: Why each observation delegate runs on a new thread
body: <p>In Rx when using Scheduler.NewThread for ObserveOn method, what is the advantage of having each Observation delegate (OnNext) running on a new thread, when Rx already guarantees that the OnNexts will never overlap. If every OnNext is going to be called one after another, why need new thread for each of them.</p>
  
  <p>I understand why would one want to run Observation delegates on a thread different than the subscription and application thread but running each observation delegate on a new thread  when they will never run in parallel?.... doesn't make sense to me or am I missing something here? </p>
  
  <p>For Example</p>
  
  <pre><code>using System;
  using System.Linq;
  using System.Reactive.Concurrency;
  using System.Reactive.Linq;
  using System.Threading;
  
  namespace RxTesting
  {
      class Program
      {
          static void Main(string[] args)
          {
              Console.WriteLine("Application Thread : {0}", Thread.CurrentThread.ManagedThreadId);
  
              var numbers = from number in Enumerable.Range(1,10) select Process(number);
  
              var observableNumbers = numbers.ToObservable()
                  .ObserveOn(Scheduler.NewThread)
                  .SubscribeOn(Scheduler.NewThread);
  
              observableNumbers.Subscribe(
                  n =&gt; Console.WriteLine("Consuming : {0} \t on Thread : {1}", n, Thread.CurrentThread.ManagedThreadId));
  
              Console.ReadKey();
          }
  
          private static int Process(int number)
          {
              Thread.Sleep(500);
              Console.WriteLine("Producing : {0} \t on Thread : {1}", number,
                                Thread.CurrentThread.ManagedThreadId);
  
              return number;
          }
      }
  }
  </code></pre>
  
  <p>The above code produces following result. Notice the Consuming is done on a new thread each time.</p>
  
  <pre><code>Application Thread : 8
  Producing : 1    on Thread : 9
  Consuming : 1    on Thread : 10
  Producing : 2    on Thread : 9
  Consuming : 2    on Thread : 11
  Producing : 3    on Thread : 9
  Consuming : 3    on Thread : 12
  Producing : 4    on Thread : 9
  Consuming : 4    on Thread : 13
  Producing : 5    on Thread : 9
  Consuming : 5    on Thread : 14
  Producing : 6    on Thread : 9
  Consuming : 6    on Thread : 15
  Producing : 7    on Thread : 9
  Consuming : 7    on Thread : 16
  Producing : 8    on Thread : 9
  Consuming : 8    on Thread : 17
  Producing : 9    on Thread : 9
  Consuming : 9    on Thread : 18
  Producing : 10   on Thread : 9
  Consuming : 10   on Thread : 19
  </code></pre>