title: Task and Task.WaitAll with timeout exception handling
body: <p>When waiting for Tasks using Task.WaitAll and specifying a timeout if the WaitAll times out do I also have to separately observe any unfinished tasks (e.g. by registering a continuation)?</p>
  
  <p><a href="http://social.msdn.microsoft.com/Forums/en-IE/parallelextensions/thread/f5a6d7d5-1cfb-4d54-bf94-8ebdc4fcaf13" rel="noreferrer">This thread</a> leads me to think the answer is yes, but I haven't found anything else that confirms this.</p>
  
  <pre><code>var random = new Random();
  var tasks = Enumerable.Range(0, 10).Select((i) =&gt; Task.Factory.StartNew(() =&gt; {
          // Sleep 5-15 seconds
          Thread.Sleep(random.Next(5000, 15000));
          throw new Exception("Some exception.");
      }
  )).ToArray();
  
  try {
      // Wait for 10 seconds
      Task.WaitAll(tasks, 10000);
  } catch (AggregateException) {
      // Swallow
  }
  
  // Check to see how many tasks were unfinished
  tasks.Where(t =&gt; !t.IsCompleted).Count().Dump("Unfinished count: ");
  
  // Is this neccessary to avoid exceptions being thrown on the finalizer?
  foreach (Task task in tasks) {
      task.ContinueWith(t =&gt; t.Exception, TaskContinuationOptions.OnlyOnFaulted);
  }
  </code></pre>