在 MVC 中为 POST 使用锁是否合理?是否存在使用会使锁失效的网络农场之类的情况?我通常使用数据库锁,但我的特殊情况很难管理,而且使用监视器更简单。我不想讨论为什么我需要锁,只是想知道是否存在无法按预期工作的情况。
private static object Lockable = new Object();
public ActionResult Submit()
{
lock(Lockable)
{
}
}
在 MVC 中为 POST 使用锁是否合理?是否存在使用会使锁失效的网络农场之类的情况?我通常使用数据库锁,但我的特殊情况很难管理,而且使用监视器更简单。我不想讨论为什么我需要锁,只是想知道是否存在无法按预期工作的情况。
private static object Lockable = new Object();
public ActionResult Submit()
{
lock(Lockable)
{
}
}
为了实现对 webfarm 的锁定,您需要在网络上拥有一个共享资源(例如缓存服务器),并且您需要使用它来实现 webfarm 安全锁定。我认为这是最简单的解决方案。
您还可以隔离要序列化调用的组件并通过网络访问它。
还有另一种选择是创建一个符合 MSDTC 的组件,该组件可以登记到分布式事务中,因此所有调用者都被强制序列化他们的调用。但是,这需要设置所有环境以使用 MSDTC、企业服务等。
正如您自己所说,在少数 Web 服务器/不同进程的情况下,您的锁仅适用于当前进程,这意味着它不会影响您的应用程序的其他正在运行的实例(如果存在)。