using System.Collections.Concurrent;
using System.Threading.Tasks;
public static async Task Main()
var tokenSource = new CancellationTokenSource();
var token = tokenSource.Token;
var tasks = new ConcurrentBag<Task>();
var t = Task.Run(() => DoSomeWork(i, token), token);
Task.WaitAll(tasks.ToArray());
catch(AggregateException ex)
Console.WriteLine(ex.GetType());
foreach(var e in ex.InnerExceptions)
foreach (var task in tasks)
Console.WriteLine("Task {0} status is {1}", task.Id, task.Status);
static void DoSomeWork(int taskId, CancellationToken ct)
for (int i = 0; i <= maxIterations; i++)