asp.net锁定页面方法,直到动作完成

时间:2012-03-18 12:04:25

标签: c# asp.net

我有一个asp.net页面,可以对db执行一些更新。更新需要2-3秒,所有这些都在一个首先从db读取数据并进行一些更新的方法中。当这些操作的页面请求少于2秒时,db读取代码,读取db中相同的记录状态,并且asp.net页面请求的所有更新操作都会更新相同的记录。

我如何阻止这些,最新的请求等到最老的完成执行?

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望阻止访问特定方法集,直到该过程完成。

足够简单...创建一个静态方法并实现一个lock()。您可以通过共享锁,升级读/写锁等方式获得真正的想象......但基本原则是您锁定共享代码的关键部分,以便其他用户无法进入这些部分。

http://msdn.microsoft.com/en-us/library/c5kehkcz(v=vs.71).aspx

lock关键字通过获取给定对象的互斥锁,执行语句,然后释放锁来将语句块标记为关键部分。

static object lockObject = new Object();
static bool inProgress = false;

static void MyProcess()
{
  if(inProgress) return;

  lock(lockObject)
  {
    try{
      inProgress = true;
      // critical code here
    }
    finally
    {
      inProgress = false;
    }
  }
}

答案 1 :(得分:1)

使用适当的隔离级别和数据库锁:这些将确保正确处理任何客户端(任何事务都是精确的)并且预先检查数据完整性(检查isolation levels)。

我建议使用READ COMMITTED,以确保您永远不会读取未提交的数据,并且在更新同一记录期间,事务会排队。