using System.Collections.Generic;
using System.Threading.Tasks;
var c = new CancellationTokenSource();
await Task.WhenAll(new List<Task>(){ OuterThread().WaitAsync(c.Token), CancelAfterXSeconds(c, 5) });
public static async Task CancelAfterXSeconds(CancellationTokenSource c, int s)
await Task.Delay(1000 * s);
public static async Task OuterThread()
Console.WriteLine("Outer 1");
Console.WriteLine("Outer 2");
Console.WriteLine("Outer 3");
_ = GenericThread("F&F Before");
await GenericThread("Inner").ConfigureAwait(false);
Console.WriteLine("Outer 4");
Console.WriteLine("Outer 5");
_ = GenericThread("F&F After");
Console.WriteLine("Outer 6");
Console.WriteLine("Outer 7");
public static async Task GenericThread(string prefix)
Console.WriteLine($"{prefix} 1");
Console.WriteLine($"{prefix} 2");
Console.WriteLine($"{prefix} 3");