using System.Threading.Tasks;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace ConsoleApplication
public static void TaskCancellationTest()
Console.WriteLine("TaskCancellationTest started.");
var cts = new CancellationTokenSource();
if (cts.Token.IsCancellationRequested)
if (cts.Token.IsCancellationRequested)
Console.WriteLine("Cancelling...");
cts.Token.ThrowIfCancellationRequested();
catch (OperationCanceledException)
Console.WriteLine("Gracefully canceled.");
Console.WriteLine("TaskCancellationTest completed.");
Console.WriteLine("TaskCancellationTest... Failure: " + ex);
public static void TaskCancellationTest2()
Console.WriteLine("TaskCancellationTest2 started.");
var cts = new CancellationTokenSource();
var t2 = t1.ContinueWith(task =>
cts.Token.ThrowIfCancellationRequested();
Console.WriteLine("Cancelling...");
catch (AggregateException ae)
if (ae.InnerExceptions.Count == 1 && ae.InnerExceptions.Single() is OperationCanceledException)
throw ae.InnerExceptions.Single();
catch (OperationCanceledException)
Console.WriteLine("Gracefully canceled.");
Console.WriteLine("TaskCancellationTest2 completed.");
Console.WriteLine("TaskCancellationTest2... Failure: " + ex);
public static void Main(string[] args)
Console.WriteLine("Enter to exit...");