.NET 4.5にて、CancellationTokenSourceクラスに以下のメソッドが追加されました。
CancellationTokenSource.CancelAfter メソッド
CancelltionTokenSourceやCancellationTokenについては
以前に記事を書いておりますので、そちらを参照下さい。
- .NET クラスライブラリ探訪-058 (System.Threading.CancellationToken, System.Threading.CancellationTokenSource, キャンセル処理)
で、今回追加されたCancelAfterメソッドですが、名前の通り指定した時間待機した後で
キャンセルを発生させます。指定できるのは、Int32かTimeSpanです。
以下、サンプルです。
namespace Sazare.Samples { using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; using Sazare.Common; /// <summary> /// CancellationTokenとCancellationTokenSourceについてのサンプルです。 /// </summary> /// <remarks> /// .NET 4.5から追加されたCancelAfterメソッドのサンプルです。 /// </remarks> [Sample] class CancellationTokenSamples02 : IExecutable { public void Execute() { // // .NET 4.5からCancellationTokenSourceにCancelAfterメソッド // が追加された。CancelAfterメソッドは、指定時間後にキャンセル // 処理を行うメソッドとなっている。 // // CancellationTokenSource.CancelAfter メソッド // http://msdn.microsoft.com/ja-jp/library/hh194678(v=vs.110).aspx // // 引数には、Int32またはTimeSpanが指定できる。 // var tokenSource = new CancellationTokenSource(); var token = tokenSource.Token; Action action = () => { while (true) { if (token.IsCancellationRequested) { Output.WriteLine("Canceled!"); break; } Output.Write("."); Thread.Sleep(TimeSpan.FromSeconds(1)); } }; var task = Task.Run(action, token); // // 3秒後にキャンセル // tokenSource.CancelAfter(TimeSpan.FromSeconds(3)); task.Wait(); tokenSource.Dispose(); } } }
実行すると以下のようになります。
指定した時間後にキャンセル処理されているのが分かります。
================== START ================== ...Canceled! ================== END ==================
以下、参考資料です。
- CancellationTokenSource.CancelAfter メソッド
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場