con*_*tor 11 c# transactions try-catch try-finally
我现在已经看过这种模式了几次:
bool success = false;
try
{
DoSomething();
success = true;
}
finally
{
if (!success)
Rollback();
}
Run Code Online (Sandbox Code Playgroud)
而且我一直在想:为什么这比使用catch回滚更好?
try
{
DoSomething();
}
catch
{
Rollback();
throw;
}
Run Code Online (Sandbox Code Playgroud)
确保更改在失败时回滚的两种方法之间有什么区别?
这里的明确目标是Rollback在发生任何错误时引起调用。两个代码片段都实现了这个目标。第一个使用总是运行的finally,它验证了最后一行try成功到达块的最后一行。第二个捕获任何错误,回滚事务,然后重新抛出捕获的异常。任一片段的结果是,抛出的任何异常都将导致回滚,同时仍冒泡到下一个级别。
您提到该项目是从 Java 移植的。在 Java 中,您可以 像在 C# 中一样使用throw;. 您还可以抛出一个新的异常,该异常仍将维护调用堆栈(等)。第二个在 C# 中更清晰/更简单(虽然不是很多),第一个具有实际在 Java 中工作的优点。
| 归档时间: |
|
| 查看次数: |
621 次 |
| 最近记录: |