M. *_*vin -2 c# asp.net-mvc multithreading entity-framework
我目前正在ASP.NET CORE 2.0中开发一个应用程序
以下是我的控制器中的操作,当用户单击提交按钮时,该操作将被执行.
以下是被称为动作的函数
作为防止数据库内部重复的措施,我有函数IsSignedInJob().该功能有效
我的问题:
有时,当互联网连接速度很慢或服务器没有立即响应时,可以多次单击"提交"按钮.重新建立连接后,浏览器(在我的案例中为Chrome)会向服务器发送多个HttpPost请求.在这种情况下,函数(来自不同实例的相同函数)的执行时间非常接近,在数据库发生更改之前,其他实例正在进行相同的更改,而不会相互了解.
有没有办法在服务器端解决这个问题,而不是"hacky"?
谢谢
正如评论中所建议的 - 这是我的首选方法 - 您可以在第一次单击时禁用该按钮.
另一种解决方案是在字典中添加一些内容,指示作业已经注册,但这可能需要使用锁定,因为您需要确保一次只能有一个线程可以读写.并发集合不会起作用,因为问题不在于此操作是否是线程安全的.IsSignedInJob
您拥有的方法可以在幕后执行此操作但我不会检查数据库,因为延迟可能太高.从字典中添加/删除密钥应该快得多.
归档时间: |
|
查看次数: |
96 次 |
最近记录: |