簡體   English   中英

如何使用父級和子級的Wait()處理不同的Task異常?

[英]How to handle different Task exceptions with Wait() of parent and child.ContinueWith?

我有一些父級/子級任務的層次結構:

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);
}

結果,“外部處理程序”處理了已經由“內部處理程序”處理的異常:

Inner handler: Inner fault
Outer handler: Outer fault
Outer handler: Inner fault

是否可以防止在“外部句柄”(在我的示例中為“內部處理器”)中處理已處理的異常?

如果您在t21上刪除TaskCreationOptions.AttachedToParent ,它將起作用。

在這種情況下,您可能需要在t1添加t22.Wait()來重現附加子任務的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM