Yaron Levi Yaron Levi -4 years ago 172
C# Question

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

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 ?

Answer Source

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/

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download