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文から抜けるようになる.
また継ぎ足す..