2 回答

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

TA貢獻1806條經驗 獲得超5個贊
你正在吞下這個例外。將您期望的異常添加到 catch 塊中
try
{
//code
}
catch(Exception ex)
{
//thrown exception
}
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報