C# 如何使用parent和child.ContinueWith的Wait()处理不同的任务异常?
我有一些父/子任务的层次结构:C# 如何使用parent和child.ContinueWith的Wait()处理不同的任务异常?,c#,.net-4.0,exception-handling,task-parallel-library,C#,.net 4.0,Exception Handling,Task Parallel Library,我有一些父/子任务的层次结构: var t1 = Task.Factory.StartNew(() => { var t21 = Task.Factory.StartNew(() => { throw new Exception("Inner fault"); }, TaskCreationOptions.AttachedToParent); var t22 =
var t1 = Task.Factory.StartNew(() =>
{
var t21 = Task.Factory.StartNew(() =>
{
throw new Exception("Inner fault");
}, TaskCreationOptions.AttachedToParent);
var t22 = t21.ContinueWith(ant =>
{
Console.WriteLine("Inner handler: " + ant.Exception.InnerException.Message);
}, TaskContinuationOptions.AttachedToParent | TaskContinuationOptions.OnlyOnFaulted);
throw new Exception("Outer fault");
});
try
{
t1.Wait();
}
catch (AggregateException ae)
{
foreach (var e in ae.Flatten().InnerExceptions)
Console.WriteLine("Outer handler: " + e.Message);
}
因此,“外部处理程序”处理已由“内部处理程序”处理的异常:
是否有可能阻止处理“外部句柄”(在我的示例中是“内部句柄”)中已处理的异常?如果删除
任务创建选项,它会起作用。在t21
上附加了toparent
在这种情况下,您可能希望在
t1
中添加t22.Wait()
,以再现的行为。如果删除TaskCreationOptions,则该操作有效。请在t21
上附加不透明的
在这种情况下,您可能需要在t1
中添加t22.Wait()
,以重现
Inner handler: Inner fault
Outer handler: Outer fault
Outer handler: Inner fault