ASP.NET竞争条件

Gre*_*WI2 2 asp.net locking race-condition

防止两个不同的人同时执行相同方法的最佳方法是什么?例如,用户A与用户B在同一页面上.两者都按下页面上的按钮,同时执行该事件的代码.我试图让一个等待另一个完成.

这样做有一个共同的方法吗?

这里有更多信息..

这是一个简单的游戏,你购买网站的成员(如FB上的自有游戏).查询字符串是用户的ID.我有一个问题,两个人同时点击购买.一个得到用户而另一个只是亏钱.因此,我试图阻止在同一时间购买以阻止这种情况发生.

Rus*_*Cam 5

Page将为每个请求创建一个实例,因此假设您拥有的逻辑位于实例成员中且不访问共享的任何内容,则不需要锁定.

如果点击共享资源,有几种方法可以强制执行锁定.一种方法是使用lock声明,例如

private static someObject = new Object();

public void SomeMethod() 
{
    lock(someObject) 
    {
        // do something with your shared resource.
    }

}
Run Code Online (Sandbox Code Playgroud)

一般来说,您应该尽可能避免使用锁(尽管有许多情况需要锁定).

编辑:

如果您将数据保存在支持事务的数据源(例如数据库)中,那么您首先要检查在用户单击"是"之间的时间内尚未购买用户尝试购买的内容在页面上,您的应用程序收到响应.因此,您需要检查数据源以查看它是否尚未购买,如果没有,则为用户"购买"该项目.这应该在交易内部完成,因此它是原子的,因此如果"购买"项目的操作成功,您只能从用户的账户中获取资金.