【发布时间】:2015-06-30 09:42:37
【问题描述】:
我想知道这段代码是否是线程安全的, 这取自数据表编辑器 c# API https://editor.datatables.net/manual/net/webapi
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 个线程更新相同数据时出现死锁,这甚至可能吗?)
【问题讨论】:
-
这取决于数据库。通常,如果您正在执行 write,则该表会被 sql server 锁定。如果你只是在做读取,那么做一些“线程安全”的事情是没有意义的。您期望数据库会发生什么,为什么?在提出问题之前,您是否对此进行过调查?
-
如果您担心多次访问之间的线程安全,您可以随时使用事务。
-
每个请求都将由一个单独的控制器实例处理,因此不会有多个线程进入同一个 Staff() 方法...
标签: c# datatables