[英]Running multiple tasks in parallel. How to get the reason behind a TaskCancelledException?
这是我的代码:
foreach (var batch in listOfBatches)
{
var baseTask = Task.Run(() => GetResult(batch));
backgroundTasks.Add(baseTask);
}
var combinedTask = Task.WhenAll(backgroundTasks);
var selections = combinedTask.ContinueWith(task => task.Result.SelectMany(x => x).ToList(),
TaskContinuationOptions.OnlyOnRanToCompletion);
return selections.Result;
GetResult有时会为其中一个批次抛出异常。 在这种情况下,我希望用户查看GetResult抛出的实际异常是什么。 但是,输出不是实际的异常,而是TaskCancelledException。 如何提取GetResult引发的异常,以便用户可以看到它?
不要使用ContinueWith
向任务添加延续。 使用await
。 除其他外,它具有更加直观的错误处理语义。 如果您await
WhenAll
返回的任务,则当前方法的任务将被标记为有故障,并且表示传递给WhenAll
的任务中的第一个错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.