Throw Exception inside a Task - "await" vs Wait()

async-await, c#, exception, parallel-extensions, task-parallel-library

Solution

The goal is to make it look/act like the synchronous version. Jon Skeet does a great job explaining this in his Eduasync series, specifically this post:

http://codeblog.jonskeet.uk/2011/06/22/eduasync-part-11-more-sophisticated-but-lossy-exception-handling/

Problem

``` static async void Main(string[] args) { Task t = new Task(() => { throw new Exception(); }); try { t.Start(); t.Wait(); } catch (AggregateException e) { // When waiting on the task, an AggregateException is thrown. } try { t.Start(); await t; } catch (Exception e) { // When awating on the task, the exception itself is thrown. // in this case a regular Exception. } } ``` In TPL, When throwing an exception inside a Task, it's wrapped with an AggregateException. But the same is not happening when using the await keyword. What is the explanation for that behavior ?

Original source