C# Task timeout

C#を使っていてTaskをtimeoutで止めたくなった時のひとつの方法

// CanellationTokenの元を作る
CancellationTokenSource tokenSource = new CancellationTokenSource();

// Tokenを取得する
var tok = tokenSource.Token;

// 何か重い処理を実行する.
Task.Run(() => { HeavyTask(tok); });

// 20秒間待機する.
Thread.Sleep(2000);

// tokenSourceをキャンセルする.
tokenSource.Cancel();

流れとしてはCancellationTokenSourceインスタンスを作りTokenを取得する.このTokenをキャンセルすることでHeacyTaskを止めることができる.

といってもこの場合はHeavyTask内にキャンセルトークンがキャンセルされた時の処理を書かねばならない.

void HeavyTask(CancellationToken token){
    
    while(true){

        Console.WriteLIne( "in HeavyTask" );

        if( token.IsCancellationRequested ){
            break;
        }
    }
}

このように書くと.tokenSource.Cancel()が呼ばれた時にWhile文から抜けるようになる.

また継ぎ足す..