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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == C#で一定時間内に処理が終わらなければ終了または中断する処理を記載する。<br> Taskを生成して、一定時間後にキャ…」)
 
(Wiki がページ「キャンセル処理を利用したタイムアウト」を「キャンセル処理を利用したタイムアウト(C Sharp)」に、リダイレクトを残さずに移動しました)

2020年2月5日 (水) 00:07時点における版

概要

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