我有两个任务:
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
}
如果其中一个任务发生异常,我将抛出一个新的聚合异常,但只有在第二个任务完成后才到达 catch 语句。我想立即抓住它,以停止第二个任务中不必要的工作。
我尝试使用取消令牌:
CancellationTokenSource cts = new CancellationTokenSource();
Task.WaitAll(tasksArr,cts.Token);
但这不是一个好的解决方案,因为它需要处理内部异常 + 捕获的异常将是OperationCanceledException
有任何想法吗?