我有一個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