using System.Collections.Generic;
using System.Threading.Tasks;
static CancellationTokenSource cts = new CancellationTokenSource();
static Random random = new Random();
static async Task Main(string[] args)
static async Task Foo(CancellationToken token)
Console.WriteLine("Starting Foo");
await DoAsyncStuff1(token);
await DoAsyncStuff2(token);
await DoAsyncStuff3(token);
Console.WriteLine("Foo Completed");
Console.WriteLine($"Exception was caught {e}");
await Task.Delay(TimeSpan.FromSeconds(1), token);
Console.WriteLine($"Wait to restart");
static async Task DoAsyncStuff1(CancellationToken token)
Console.WriteLine("Start doing async task 1");
Console.WriteLine("Completed doing async task 1");
static async Task DoAsyncStuff2(CancellationToken token)
Console.WriteLine("Start doing async task 2");
Console.WriteLine("Completed doing async task 2");
static async Task DoAsyncStuff3(CancellationToken token)
Console.WriteLine("Start doing async task 3");
var number = random.Next(5);
Console.WriteLine($"Random number is {number}");
token.ThrowIfCancellationRequested();
Console.WriteLine("Completed doing async task 3");