看着下面的CRUD代碼,我想知道這是否是真的有必要使用鎖,如果他們可以簡單地省略:這是推薦使用C#中的鎖嗎?
private static readonly object Lock = new object();
/// <summary>
/// Returns all contacts in the list.
/// GET /Contacts/ (Content-Type:application/json)
/// </summary>
[ActionName("Index"), AcceptVerbs(HttpVerbs.Get), IsAjaxRequest(true)]
public ActionResult GetAll()
{
lock (Lock)
{
return new JsonWithStatusCodeResult(HttpStatusCode.OK, Contacts);
}
}
/// <summary>
/// Returns the contact with the provided ID.
/// Get /Contacts/{id}
/// </summary>
[ActionName("Item"), AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetById(Guid id)
{
lock (Lock)
{
var index = Contacts.FindIndex(x => x.Id == id);
if (index < 0)
{
ModelState.Clear();
ModelState.AddModelError("Id", "The provided ID does not exist in the collection");
return InvalidModelStateFilterAttribute.GetErrorResult(HttpStatusCode.NotFound, ModelState);
}
return new JsonWithStatusCodeResult(HttpStatusCode.OK, Contacts[index]);
}
}
僅供參考 - 這是來自一個項目,我在看代碼,並想知道在這種情況下是否有合乎邏輯的理由使用鎖。
謝謝。
看起來很隨機給我。 'Contacts'全局對象(對於ASP.Net來說很奇怪)或者是從其他線程更新(再也沒有代碼顯示這種情況)? –
你爲什麼鎖定?您的請求將在單獨的線程中處理,您似乎沒有共享任何內容。聯繫人是數據庫的上下文嗎? – xxbbcc
如果您的Contacts變量不是線程安全的,那麼這些鎖將確保它們不會被不同線程同時使用。除此之外,我們需要更多詳細信息來告訴「推薦」... –