2 つのタスクがあります。
try
{
List<Task> tasks = new List<Task>();
Task task1 = Task.Factory.StartNew(() => func(param));
tasks.Add(task1);
if (someCondition)
{
Task task2 = Task.Factory.StartNew(() => func2(param2));
tasks.Add(task2);
}
tasksArr = tasks.ToArray();
Task.WaitAll(tasksArr);
}
catch (AggregateException e)
{
//handle
}
catch (Exception)
{
//handle
}
タスクの 1 つで例外が発生した場合、新しい集計例外をスローしていますが、2 番目のタスクが終了した後にのみ catch ステートメントに到達しています。2番目のタスクで不要な作業を停止するために、すぐにキャッチしたい。
キャンセルトークンを使用しようとしました:
CancellationTokenSource cts = new CancellationTokenSource();
Task.WaitAll(tasksArr,cts.Token);
しかし、内部例外が処理される必要があり、キャッチされた例外がOperationCanceledException
何か案は?