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

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動
(Wiki がページ「キャンセル処理を利用したタイムアウト」を「キャンセル処理を利用したタイムアウト(C Sharp)」に、リダイレクトを残さずに移動しました)
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
5行目: 5行目:


==  サンプルコード ==
==  サンプルコード ==
  <source lang="cpp">
  <syntaxhighlight lang="cpp">
  public cancellationTask()
  public cancellationTask()
  {
  {

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

概要

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

サンプルコード

<syntaxhighlight lang="cpp">
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);
      }
   }
}
</source>