キャンセルトークンを使用してタイムアウト(タイムアウトが終了する前に)を持つタスクをキャンセルすると、例外がスローされます。例:例外がスローされずにタイムアウトで待機しているタスクをキャンセルする方法
mytask.start();
bool didTaskRunInTime = mytask.wait(5 mins, _cancelToken);
つまり、次のようには行けません。
//was the task cancelled
if (_cancelToken.IsCancelRequested)
{
// log cancel from user to file etc
}
if (didTaskRunInTime)
{
int taskResult = myTask.Result;
// log result to file
}
else if (!_cancelToken.IsCancelRequested)
{
// Tell user task timed out , log a message etc
}
私はこのすべてをキャッチブロックで実行しなければならず、コードが乱雑になります。これを行う正しい方法は何ですか?
私はそれがスローされると思う、WaitAnyはすべての例外を集約します、あなたは例外をキャッチするためにwaitAny(そしておそらく他のものをキャンセルした後)を待つ必要があります。 – eFloh
ジョンに感謝します。しかし、waitanyはタイムアウトを取らない。私はタイムアウト処理を必要とする長い実行エクスポートを持っています。 – Gullu
@eFloh: 'WaitAll'は例外を集約します。 「WaitAny」はしません。サンプルコードを参照してください。 –