对于我正在开发的一个应用程序,我的一个队友一直在开发一个通用错误处理程序,当我们的一个系统进入异常状态时,它会向我们的团队执行一些报告,处于相对较高的水平。
然而,几周前,我写了一些低级别的代码(特别是数据库访问),提供了一些通知。随着这个团队成员的高级代码的出现,团队的其他成员觉得我们可以安全地删除我的 try/catch 系统。
一个问题:IsSuccessful
从这个特定的存储库方法返回的数据结构上有一个标志。发生异常时,该标志保持为假(成功获取数据时,该标志设置为真。)
因此,目前,我的代码如下所示:
public FooResult Foo()
{
FooResult result = new FooResult { IsSuccessful = false };
SqlParameter[] args = new []
{
// Some args, immaterial to the situation.
}
try
{
DataSet ds = SqlHelper.ExecuteDataset(_connection, CommandType.Text, query, args);
result = new FooResult
{
IsSuccessful = true,
// ...Other fields are set...
};
}
catch
{
result.IsSuccessful = false;
throw; // Per request
}
return result;
}
这导致了我的问题:在抛出异常并在更高级别处理时,之后会发生什么?我的代码会冒泡回到它停止的地方,还是在其他地方恢复执行?当出现问题并在不同级别进行清理时,代码将继续运行在哪里?