「キャンセル処理を利用したタイムアウト(C Sharp)」の版間の差分

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
(文字列「</source>」を「</syntaxhighlight>」に置換)
 
22行目: 22行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:C_Sharp]]
[[カテゴリ:C_Sharp]]

2021年11月15日 (月) 00:33時点における最新版

概要

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