我有一个asp.net mvc 3网站,当某人编辑任务时,它锁定该任务,以便他们可以对其进行编辑并确保其他订阅者在编辑任务时不删除或更新任务。尝试抓住最后的声明?
他们点击任务上的编辑,它会去抓住任务并锁定它。他们编辑任务并更新。
现在我有这样的事情
public Task Update(Task task)
{
isLocked = true;
try
{
// set task to unlock itself(this is stored on the task row in the db)
task.locked = false
task.DateLocked = "6/3/1900";
task.Commit(); // save the newly updated task; - nhibernate
isLocked = false;
return task
}
catch(SqlException ex)
{
// error logging here
// "database is down error to user"
}
finally
{
if(isLocked)
{
task.locked = false
task.DateLocked = "6/3/1900";
task.Commit();
}
}
}
如果任务被成功更新文件被解锁,所以我不会在最后再次打扰做。如果我遇到一些像空引用这样的意外错误(非常不可能,因为我检查了可能为空的任何内容并导致异常,但让我们假装它会以某种方式发生)。
我最后的声明会启动,并确保当然解锁网站的文件会炸毁,用户会得到一些通用的“出错的错误”,但该文件将被解锁,以便他们可以再试一次。
现在如果错误是SqlException错误会发生什么?它会被抓住,但最后的声明仍然会运行,它也会在那里炸毁。
我应该在另一个try catch中封装我的finally块中的代码吗?
我确实有一个计划任务,每隔一段时间运行一次,以确保任务最终将被解锁,因此如果它像数据库关闭一样,它不像任务被永久锁定,它最终应该被解锁。
你不需要伪装,异常就莫名其妙地发生了:d – TheVillageIdiot 2011-06-04 04:44:18