簡體   English   中英

在匿名方法中執行任務時拋出異常

[英]Catch exception thrown while task execution in anonymous method

我有一個類似於這樣的代碼:

class A
{
    public Action<int, int> OnAddition;

    public int Add(int val1, int val2)
    {
        if (OnAddition != null)
        {
            OnAddition(val1, val2);
        }

        return val1 + val2;
    }
}

class B
{
    A a = new A();

    public B()
    {
        a.OnAddition = (v1, v2) =>
        {
            Task.Run(() =>
            {
                Console.WriteLine("Adding {0} and {1}", v1, v2);
                throw new Exception("Blah");
            });
        };
    }

    public int Add(int val1, int val2)
    {
        return a.Add(val1, val2);
    }
}

class Program
{
    static void Main(string[] args)
    {
        try
        {
            B b = new B();

            Console.WriteLine(b.Add(1, 7));
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

我無法控制AB類,問題是當throw new Exception("Blah"); 發生我的代碼無法捕獲異常。

我的代碼如何捕獲該異常?

你不能。 如果您無法更改這些類的代碼,則無法捕獲該異常。

但是,您可以通過訂閱在GC收集該任務時將引發的TaskScheduler.UnobservedTaskException事件來通知您。

由於您無法控制類,因此無法捕獲異常。 已經完成調用事件后拋出異常,因此在拋出事件時您已經(至少可能)離開了try塊。 該事件需要專門設計為支持處理異步方法處理程序的錯誤,以便能夠處理此類異常。

暫無
暫無

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

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