using System.Threading.Tasks;
public static void Main()
CancellationTokenSource source = new CancellationTokenSource(3000);
Task worker = WaitForSomeOtherProcess(source.Token);
Task sentinel = WaitForTimeout(source.Token);
Task.WaitAll(worker, sentinel);
catch(OperationCanceledException oce)
Console.WriteLine(oce.CancellationToken.Equals(source.Token));
catch (AggregateException ae)
OperationCanceledException oce = ae.InnerException as OperationCanceledException;
Console.WriteLine(oce.CancellationToken.Equals(source.Token));
public static async Task WaitForSomeOtherProcess(CancellationToken token)
CancellationTokenSource newSource = CancellationTokenSource.CreateLinkedTokenSource(token);
Console.WriteLine("Processing...");
newSource.Token.ThrowIfCancellationRequested();
public static async Task WaitForTimeout(CancellationToken token)
Console.WriteLine("Waiting for timeout...");
token.ThrowIfCancellationRequested();