2015-06-30 55 views
0

我想知道如果這個代碼是線程安全的, 這是從數據表編輯器C#API https://editor.datatables.net/manual/net/webapiWeb API 2控制器線程安全嗎? (數據表編輯器插件)

public class StaffController : ApiController 
{ 
    [Route("api/staff")] 
    [HttpGet] 
    [HttpPost] 
    public IHttpActionResult Staff() 
    { 
     var request = HttpContext.Current.Request; 
     var settings = Properties.Settings.Default; 

     using (var db = new Database(settings.DbType, settings.DbConnection)) 
     { 
      var response = new Editor(Db, "staff") 
       .Model<StaffModel>() 
       .Process(request) 
       .Data(); 

      return Json(response); 
     } 
    } 
} 

採取了幾個線程正在進入Staff()法的更新,會發生什麼?它將如何影響數據庫?

編輯 我與SQL數據庫的工作,數據庫應該持有的重要共享數據,我很擔心,它會在中間突破(如死鎖時,2線程正在更新相同的數據,它甚至有可能?)

+1

這取決於數據庫。通常,如果您正在執行* write *,則表被sql server鎖定。如果你只是在閱讀,那麼在做「線程安全」的事情上沒有任何意義。你期望數據庫會發生什麼,爲什麼?在問你的問題之前,你有過調查嗎? – Patrick

+0

如果您擔心多個訪問之間的線程安全性,您可以隨時使用交易btw。 – Patrick

+1

每個請求將由一個單獨的控制器實例處理,因此不會有多個線程進入相同的Staff()方法... –

回答

0

是的,這是線程安全的,框架通過排隊它們來處理多個併發請求。順便說一句,你只是在讀數據,所以不用擔心:)