【C#】CancellationToken.Register でキャンセル時の処理を登録する

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();
    }
}