「キャンセル処理を利用したタイムアウト(C Sharp)」の版間の差分
ナビゲーションに移動
検索に移動
細 (文字列「<source lang」を「<syntaxhighlight lang」に置換) |
細 (文字列「</source>」を「</syntaxhighlight>」に置換) |
||
22行目: | 22行目: | ||
} | } | ||
} | } | ||
</ | </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);
}
}
}