static void Work(Canceler c) { while (true) { c.ThrowIfCancellationRequested(); // ... try { OtherMethod(c); } finally { /* any required cleanup */ } } }
/* * * var cancelSource = new CancellationTokenSource(); * new Thread (() => Work (cancelSource.Token)).Start(); * void Work (CancellationToken cancelToken) * { * cancelToken.ThrowIfCancellationRequested(); * ... * } */ public static void Caller() { var canceler = new Canceler(); new Thread(() => { try { Work(canceler); } catch (OperationCanceledException) { Console.WriteLine("Canceled"); } }).Start(); Thread.Sleep(1000); canceler.Cancel(); }
static void OtherMethod(Canceler c) { // Do some thing... c.ThrowIfCancellationRequested(); }