C#のCancellationToken.Register でキャンセル時の処理を登録する方法です
CancellationToken.Registerを使う場合
CancellationToken.Register を使うと、CancellationToken に対してそれがキャンセルされた時の処理を登録することができます。
using System; using System.Threading; using System.Threading.Tasks; public sealed class Example { private static void Main() { var cancellationTokenSource = new CancellationTokenSource(); // CancellationToken.Registerの引数にキャンセル時の処理を書く cancellationTokenSource.Token.Register(() => { Console.WriteLine("Canceled"); }); // 非同期処理を実行してキャンセル Task.Delay(1000, cancellationTokenSource.Token); cancellationTokenSource.Cancel(); } }
CancellationTokenResistration.Disposeで登録解除
登録した処理は以下のように CancellationTokenRegistration.Dispose を使うことで解除できます。
using System; using System.Threading; using System.Threading.Tasks; public sealed class Example { private static void Main() { var cancellationTokenSource = new CancellationTokenSource(); var registration = cancellationTokenSource.Token.Register(() => { Console.WriteLine("Canceled"); }); // キャンセル処理を登録解除 registration.Dispose(); Task.Delay(1000, cancellationTokenSource.Token); cancellationTokenSource.Cancel(); } }