Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# asp.net mvc-竞速条件:使用相同参数锁定方法_C#_Multithreading_Asp.net Mvc 3_Thread Safety - Fatal编程技术网

C# asp.net mvc-竞速条件:使用相同参数锁定方法

C# asp.net mvc-竞速条件:使用相同参数锁定方法,c#,multithreading,asp.net-mvc-3,thread-safety,C#,Multithreading,Asp.net Mvc 3,Thread Safety,我正在开发一个asp.NETMVC3Web应用程序。 在我的应用程序中,有一个javascript客户端向我的服务器发送调用。 其中一个调用指向我的一个方法,该方法依次为: 创建对象的新实例- 将其保存到数据库中 调用远程web服务器 我通过查询我的数据库来决定是否退出该函数,以查看该对象是否确实存在(如果确实存在,则退出) 我的问题是,如果两个调用一个接一个地进行,那么对象就没有机会保存到数据库中,因此两个线程都会认为需要继续 我想要的是只为使用相同参数调用的线程锁定该方法。对整个方法,甚

我正在开发一个asp.NETMVC3Web应用程序。 在我的应用程序中,有一个javascript客户端向我的服务器发送调用。 其中一个调用指向我的一个方法,该方法依次为:

  • 创建对象的新实例-
  • 将其保存到数据库中
  • 调用远程web服务器
我通过查询我的数据库来决定是否退出该函数,以查看该对象是否确实存在(如果确实存在,则退出)

我的问题是,如果两个调用一个接一个地进行,那么对象就没有机会保存到数据库中,因此两个线程都会认为需要继续

我想要的是只为使用相同参数调用的线程锁定该方法。对整个方法,甚至部分方法使用锁是不可接受的,因为这将导致严重的性能问题


如何做到这一点?

在此场景中使用具有可序列化隔离级别的数据库事务。这将确保读取和插入操作的一致性。

在数据库级别进行检查。当其中一个保存时,另一个将失败,因为它将违反某种约束。您可以创建一个哈希表,然后首先检查对象是否已存在。。。如果没有,则继续创建它