Exceptional Async Handling: Listing 1.
Async code to purposely throw exceptions.
static void Main(string[] args)
{
GeneralThreadAffineContext.Run(() => Sample());
}
private async static void Sample()
{
var result = await FindTotalPeopleAtSchool();
Console.WriteLine("Number of people at school: {0}", result);
if (Debugger.IsAttached)
{
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
private async static Task<int> FindTotalPeopleAtSchool()
{
try
{
var getKidsTask = Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
throw new CountingException("kids");
return 88;
});
var getStaffTask = Task.Factory.StartNew(() =>
{
Thread.Sleep(1000);
throw new CountingException("staff");
return 200;
});
var kids = await getKidsTask;
var staff = await getStaffTask;
return kids + staff;
}
catch (CountingException ex)
{
Console.WriteLine("Something went wrong counting {0}", ex.Message);
}
return 0;
}
About the Author
Patrick Steele is a senior .NET developer with Billhighway in Troy, Mich. A recognized expert on the Microsoft .NET Framework, he’s a former Microsoft MVP award winner and a presenter at conferences and user group meetings.