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 关注
- 93 浏览
添加回答
举报