using System.Collections.Generic;
using System.Threading.Tasks;
public class CancellationExample
public static async Task Main()
var random = new Random();
using var cts = new CancellationTokenSource();
CancellationToken token = cts.Token;
var timer = new Timer(Elapsed, cts, 5000, Timeout.Infinite);
var product33 = new List<int>();
for (int index = 1; index < short.MaxValue; index++)
if (token.IsCancellationRequested)
Console.WriteLine("\nCancellation requested in antecedent...\n");
token.ThrowIfCancellationRequested();
return product33.ToArray();
Task continuation = task.ContinueWith(
Console.WriteLine("Multiples of 33:\n");
int[] array = antecedent.Result;
for (int index = 0; index < array.Length; index++)
if (token.IsCancellationRequested)
Console.WriteLine("\nCancellation requested in continuation...\n");
token.ThrowIfCancellationRequested();
int delay = random.Next(5, 50);
Console.Write($"{array[index]:N0}{(index != array.Length - 1 ? ", " : "")}");
if (Console.CursorLeft >= 74)
catch (TaskCanceledException ex)
Console.WriteLine(ex.Message);
Console.WriteLine("\nAntecedent Status: {0}", task.Status);
Console.WriteLine("Continuation Status: {0}", continuation.Status);
static void Elapsed(object state)
if (state is CancellationTokenSource cts)
Console.WriteLine("\nCancellation request issued...\n");