我有以下代码:
protected void ExecuteInTransaction(Action action)
{
using (SQLiteTransaction transaction = connection.BeginTransaction())
{
try
{
action.Invoke();
transaction.Commit();
}
catch(Exception)
{
transaction.Rollback();
throw;
}
}
}
在测试此类时,我设法抛出异常以测试catch
branch.
当我在Debug模式下,我继续执行这个投掷,看看调用类如何处理它,但例外的是从未被该方法抛出,相反,例外情况是不断地被抛出和捕获,再次抛出和捕获,永远不会退出该函数.
In Release模式下,应用程序冻结并停止工作:
有谁知道为什么会发生这种情况,我该如何避免它?
提前致谢!
不存在无限循环。
Visual Studio 只是停止在未捕获的异常将中止程序的地方。
尝试继续不会执行任何操作,因为没有任何进一步执行的操作(VS 只是再次显示相同的消息来提醒您)。
如果您在某个调用函数中有一个 try/catch 处理程序,您将能够在那里进行调试。
(但是如果该 catch 处理程序再次重新抛出,VS 也会停在那里。)
请注意SQLiteTransaction
当打开的事务被处理时自动处理回滚;它的设计使您的代码可以更简单:
protected void ExecuteInTransaction(Action action)
{
using (var transaction = connection.BeginTransaction())
{
action.Invoke();
transaction.Commit();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)