using System.Collections.Generic;
using System.Threading.Tasks;
public static async Task Main()
Task.FromException(new Exception("Error 1")),
Task.FromException(new Exception("Error 2")),
await Task.WhenAll(tasks);
catch (AggregateException e)
public static void Unwrap(Exception e, int depth = 0)
var indent = Tabs(depth);
if (e is AggregateException aggregate)
Console.WriteLine(indent + "Aggregate [Count = "+ aggregate.InnerExceptions.Count + "]");
foreach (var inner in aggregate.InnerExceptions)
Unwrap(inner, depth + 1);
public static void Print(Exception e, int indent = 0)
Console.WriteLine(Tabs(indent) + e.GetType().Name + ": " + e.Message);
Console.WriteLine(Tabs(indent + 1) + e.StackTrace);
public static string Tabs(int n) =>
public static Task Throw(string message, int depth)
async Task Rec(int target, int current)
if (target == current) throw new Exception(message);
await Rec(target, current + 1);
return Task.Run(async () => await Rec(depth, 0));