[英]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);
}
}
}
我無法控制A
和B
類,問題是當throw new Exception("Blah");
發生我的代碼無法捕獲異常。
我的代碼如何捕獲該異常?
你不能。 如果您無法更改這些類的代碼,則無法捕獲該異常。
但是,您可以通過訂閱在GC收集該任務時將引發的TaskScheduler.UnobservedTaskException
事件來通知您。
由於您無法控制類,因此無法捕獲異常。 您已經完成調用事件后拋出異常,因此在拋出事件時您已經(至少可能)離開了try
塊。 該事件需要專門設計為支持處理異步方法處理程序的錯誤,以便能夠處理此類異常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.