我有类似的代码:
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);
}
}
}
我无法控制班级A
和B
,问题在于何时
throw new Exception("Blah");
我的代码无法捕获异常。
我的代码如何捕获该异常?
答案 0 :(得分:2)
你不能。如果您无法更改这些类的代码,则无法捕获该异常。
但是,您可以通过订阅GC收集该任务时将引发的TaskScheduler.UnobservedTaskException
事件来通知您。
答案 1 :(得分:1)
由于您无法控制类,因此无法捕获异常。在您完成调用事件之后,您将抛出异常,因此在抛出事件时您已经(至少可能)已经离开了try
块。该事件需要专门设计为支持处理异步方法处理程序的错误,以便能够处理这样的异常。