繁体   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