キャンセル処理を利用したタイムアウト(C Sharp)

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

C#で一定時間内に処理が終わらなければ終了または中断する処理を記載する。
Taskを生成して、一定時間後にキャンセル処理を実行する。
Taskまたはキャンセル処理のいずれかが完了したとき、処理を終了することでタイムアウトが実現できる。

サンプルコード

 public cancellationTask()
 {
    var task = Task.Run(() =>
               {
                  // 何か処理
               });
    var cancellationCompletionSource = new TaskCompletionSource<bool>();
    using (var cts = new System.Threading.CancellationTokenSource(1000))
    using (cts.Token.Register(() => cancellationCompletionSource.TrySetResult(true)))
    {
       if (task != await Task.WhenAny(task, cancellationCompletionSource.Task).ConfigureAwait(false))
       {
          throw new OperationCanceledException(cts.Token);
       }
    }
 }