title: What is the proper way to propagate exceptions in continuation chains?
body: <p>What is the proper way to propagate exceptions in continuation chains?</p>
  
  <pre><code>t.ContinueWith(t2 =&gt; 
  {
       if(t2.Exception != null)
           throw t2.Exception;
  
       /* Other async code. */
  })
  .ContinueWith(/*...*/);   
  
  t.ContinueWith(t2 =&gt; 
  {
       if(t2.IsFaulted)
           throw t2.Exception;
  
       /* Other async code. */
  })
  .ContinueWith(/*...*/);
  
  t.ContinueWith(t2 =&gt; 
  {
       if(t2.Exception != null)
           return t2;
  
       /* Other async code. */
  })
  .ContinueWith(/*...*/);   
  
  t.ContinueWith(t2 =&gt; 
  {
       if(t2.IsFaulted)
           return t2;
  
       /* Other async code. */
  })
  .ContinueWith(/*...*/);
  
  
  t.ContinueWith(t2 =&gt; 
  {
       t2.Wait();
  
       /* Other async code. */
  })
  .ContinueWith(/*...*/);
  
  t.ContinueWith(t2 =&gt; 
  {     
       /* Other async code. */
  }, TaskContinuationOptions.NotOnFaulted) // Don't think this one works as expected
  .ContinueWith(/*...*/);
  </code></pre>