title: Task.WaitAll throws OperationCanceledException
body: <p>I have a list of running tasks with the same <code>CancellationTokenSource</code>.</p>
  
  <p>I want the current thread to wait until all the tasks complete <strong>or</strong> until the tasks were cancelled.</p>
  
  <pre><code>Task.WaitAll(tasks.ToArray(), searchCencellationTokenSource.Token);
  System.Console.WriteLine("Done !");
  </code></pre>
  
  <p>The tasks might be cancelled by another task even when the current thread is in a waiting state. This is normal behavior.</p>
  
  <p>However, while the current thread is in waiting state and another task cancel the tasks, the WaitAll throws <code>CancellationTokenSource</code> with a message: "The operation was canceled.".</p>
  
  <p>I know it was cancelled, I did it intentionally. I just want it to continue to the next code after the tasks were cancelled or completed, without throwing an exception.</p>
  
  <p>I know I can wrap this code with try &amp; catch but throwing an exception is heavy operation and I don't want it to happen on a normal behavior like this.</p>