asp.net锁定页面方法,直到操作完成
本文关键字:操作 方法 net 锁定 asp | 更新日期: 2023-09-27 18:28:14
我有一个asp.net页面,它执行一些数据库更新。更新需要2-3秒,所有这些都发生在一个首先从数据库读取数据并进行一些更新的方法中。当这些操作的页面请求小于2秒时,数据库读取代码,读取数据库中记录的相同状态,asp.net页面请求的所有更新操作都会更新相同的记录。
我怎么能防止最新的请求等到最老的完成执行?
有什么想法吗?
如果我理解正确,您希望在流程完成之前阻止对特定方法集的访问。
很简单。。。创建一个静态方法并实现一个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;
}
}
}
使用适当的隔离级别和数据库锁:这将确保正确处理任何客户端(确切地说是任何事务),并保持数据完整性(检查隔离级别)。
我建议使用READ COMMITTED,它可以确保您永远不会读取未提交的数据,并且在更新同一记录的过程中会对事务进行排队。