我有一个类似这样的代码:
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");
碰巧我的代码无法捕获异常。
我的代码如何捕获该异常?
最佳答案
你不能。如果您不能更改这些类的代码,您就无法捕获该异常。
但是,您可以通过订阅 GC 收集该任务时将引发的 TaskScheduler.UnobservedTaskException
事件得到通知。
关于c# - 在匿名方法中执行任务时捕获抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35278365/