Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用parent和child.ContinueWith的Wait()处理不同的任务异常?_C#_.net 4.0_Exception Handling_Task Parallel Library - Fatal编程技术网

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