2 回答

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超6個(gè)贊
您要么有一個(gè)全局異常處理程序,要么從后臺(tái)線程調(diào)用它而不等待對(duì)異步方法的調(diào)用,因此您的異常將被吞噬。例如,只需這樣做:
public override void ViewDidLoad()
{
base.ViewDidLoad();
var x = UIImage.LoadFromData(null);
}
你會(huì)得到一個(gè)System.ArgumentNullException: Value cannot be null例外,但如果你這樣做:
public override void ViewDidLoad()
{
base.ViewDidLoad();
Task.Run(() => {
var x = UIImage.LoadFromData(null);
});
}
即使您有全局異常處理程序,異常也會(huì)被吞掉并且您永遠(yuǎn)不會(huì)看到它。這是設(shè)計(jì)使然。任何未執(zhí)行的即發(fā)即忘任務(wù)都await將吞噬(即不重新拋出)即發(fā)即忘任務(wù)中引發(fā)的任何異常。
等待任務(wù)會(huì)引發(fā)異常:
public override async void ViewDidLoad()
{
base.ViewDidLoad();
await Task.Run(() => {
var x = UIImage.LoadFromData(null);
});
}

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
你正在吞下這個(gè)例外。將您期望的異常添加到 catch 塊中
try
{
//code
}
catch(Exception ex)
{
//thrown exception
}
- 2 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報(bào)