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

提供:MochiuWiki : SUSE, EC, PCB
2019年7月6日 (土) 04:09時点における192.168.1.23による版 (ページの作成:「== 概要 == C#で一定時間内に処理が終わらなければ終了または中断する処理を記載する。<br> Taskを生成して、一定時間後にキャ…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

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