Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

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 ?

like image 318
Yaron Levi Avatar asked Sep 07 '11 20:09

Yaron Levi


1 Answers

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/

like image 120
James Manning Avatar answered Sep 18 '22 16:09

James Manning