title: How to cancel GetConsumingEnumerable() on BlockingCollection
body: <p>In the following code I'm using the CancellationToken to wake up the GetConsumingEnumerable() when the producer is not producing and I want to break out of the foreach and exit the Task. But I dont see IsCancellationRequested being logged and my Task.Wait(timeOut) waits for the full timeOut period. What am I doing wrong?</p>
  
  <pre><code>userToken.Task = Task.Factory.StartNew(state =&gt;
  {
      userToken.CancelToken = new CancellationTokenSource();
  
      foreach (var broadcast in userToken.BroadcastQueue.GetConsumingEnumerable(userToken.CancelToken.Token))
      {
          if (userToken.CancelToken.IsCancellationRequested)
          {
              Log.Write("BroadcastQueue IsCancellationRequested");
              break;
              ...
          }
      }
  
      return 0;
  }, "TaskSubscribe", TaskCreationOptions.LongRunning);
  </code></pre>
  
  <p>later...</p>
  
  <pre><code>UserToken.CancelToken.Cancel();          
  try
  {
      task.Wait(timeOut);
  }
  catch (AggregateException ar)
  {
      Log.Write("AggregateException " + ar.InnerException, MsgType.InfoMsg);
  }
  catch (OperationCanceledException)
  {
      Log.Write("BroadcastQueue Cancelled", MsgType.InfoMsg);
  }
  </code></pre>