ASP.NET 多次点击button后事件执行多次 并发解决 频繁操作解决办法
首先让我们体验一下频繁操作:
1)打开项目,在后台aspx.cs等服务器页面,设置断点.
2)点击页面按钮
3)调试开始进入断点,然后重复点击页面按钮
4)服务器第一次事件已经处理完毕,调试再次进入了断点,然后再进行处理
然后就出现了多条数据的新增问题.
使用lock也将无法解决该问题.因为lock是解决并发问题的,不是解决频繁操作的问题的.
因此这里我要说一下并发操作和频繁操作.并发是多个线程同时进行操作,频繁操作是指一个操作未响应到客户端,另一个操作再次重复进行,它们是2个不同的概念.
并发问题处理方法
大家可能很熟悉这个代码:
public class Singleton
{
private volatile static Singleton _instance = null;
private static readonly object lockHelper = new object();
private Singleton(){}
public static Singleton CreateInstance()
{
if(_instance == null)
{
lock(lockHelper)
{
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
对于并发,我们主要做的事情是:让一个线程跑完之后再跑另一个线程,因此需要加锁
加锁使用了lock关键字,lock就是把{}中的代码段锁定,防止多个线程同时运行该代码段.
我们一般对于普通并发,使用lock就可以解决了,但是如果是秒杀的这种情况呢。
我们这时候需要使用队列集合去进行操作.
频繁操作处理方法:
我们想象一下:第一次点击按钮,假设生成了一个操作会话OperSA1,服务器执行第一次按钮操作的事件,执行未完成时,再次点击该按钮,
生成第2个操作会话OperSA2,服务器操作等待中.第一次按钮事件操作完成之后,客户端还没有响应这时候服务器就忙着执行第2次按钮事件了。
我们认为服务器执行操作是有错的,错在第1次按钮事件执行完成之后没有立即响应给客户端就执行第2次操作了。可是服务器认为它本身是没有错的。
它认为错的是客户端,客户端操作频繁了。这时候怎么办呢?
我们不如给服务器和客户端定一个操作约定:
在客户端定义一个会话标识符OperFrequent,如果客户端执行了第一次操作,则会话标识符OperFrequent生成标识,如果客户端再次执行了操作,但是会话标识符标识已经生成,则终止该操作。这是客户端的约定。
服务器在接到请求后,执行操作,操作完成后,清理客户端标识符。这是服务器的约定。
所以服务器必须在实际响应客户端之后才能修改客户端的会话标识符。
代码:
会话标识符定义:
responseVal就是OperFrequent
<input type="hidden" id="responseVal" value="none" runat="server" />
客户端执行操作:
if (document.getElementById('responseVal').value == 'none') {
document.getElementById('responseVal').value = 'change';
// 触发服务器事件
}
服务器响应操作:
this.responseVal.Value = "none";
ASP.NET 多次点击button后事件执行多次 并发解决 频繁操作解决办法的更多相关文章
- 点击Button后,执行MouseDown的过程(使用Call Stack观察很清楚)
Form1上放两个按钮Button1和Button2,默认输入焦点是Button1,现在点击Button2,产生WM_LBUTTONDOWN消息 procedure TForm1.Button2Mou ...
- 点击button后刷新了页面
今天遇到一个特别奇怪的事,在页面中使用button标签,添加了点击事件onclic,点击的时候倒是执行了绑定的方法,但页面被刷新了! 什么鬼?我没与提交表单啊! 原来,button默认具有提交表单的动 ...
- 点击button传递消息,但是页面不跳转的解决方法
最近在做一个物联网的项目时遇到的问题:界面上有很多控制开/关灯的button,通过点击button来控制各个灯的亮灭.我需要将获取的不同的点击事件消息,以Socket通信的方式发送给硬件端的服务监听程 ...
- 点击TButton后的执行OnClick和OnMouseDown两个事件的过程(其实是通过WM_COMMAND执行程序员的代码)
问题的来源:在李维的<深入浅出VCL>一书中提到了点击TButton会触发WM_COMMAND消息,正是它真正执行了程序员的代码.也许是我比较笨,没有理解他说的含义.但是后来经过追踪代码和 ...
- [html]点击button后画面被刷新原因:未设置type="button"
一.问题原因解析: 在form表单里的button, type 属性未设置的情况下,Internet Explorer 的默认类型是 "button",而其他浏览器中(包括 W3C ...
- 点击 Button触发事件将GridView1 CheckBox勾选的行添加到GridView2中
有时候想实现一个CheckBox选取功能,但是很多细节不是很清楚 相信大家都有遇到类似的情况,直接看代码,如下: 前端代码GridView1,CheckBox控件设置 <asp:GridView ...
- Spring初始化完成后直接执行一个方法,初始化数据(解决方法被重复执行两次的情况)
在做WEB项目时,经常在项目第一次启动时利用WEB容器的监听.Servlet加载初始化等切入点为数据库准备数据,这些初始化数据 是系统开始运行前必须的数据,例如权限组.系统选项.默认管理员等等.但是项 ...
- 点击button触发onclick事件判空后依旧自动跳转
这是一个前端的问题. 其中判断字符串为空的脚本代码是这样的: var remark = $("#Remark").val(); //判空.注意:var reg = /空格/g; v ...
- 点击单选button后的文字就可以选定相应单选button
比方我想点击单选button后的文字就选中对应的button: <input type="radio" name="sex" value="1& ...
随机推荐
- QL Server 高可用性(一)AlwaysOn 技术
从 SQL Server 2008 开始,微软在“高可用”.“灾难恢复”技术中使用 AlwaysOn 一词.在 SQL Server 2012 中,微软明确地打出的 AlwaysOn 招牌. SQL ...
- RzPageControl Tab拖拽 移动
- php实现概率性随机抽奖代码
1.初始数据: 权重越大,抽取的几率越高 [奖品1, 权重 5], [ 奖品2, 权重6], [ 奖品3, 权重 7], [ 奖品4, 权重2] 2.处理步骤: 1)N = 5 + 6 + 7 + 2 ...
- 性能测试一:jmeter基础入门
JMeter,一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是功能和性能测试的工具.具有高可扩展性.支持Web(HTTP/HTTPS).SOAP.FTP.JAVA等多种协议的 ...
- Python的字符串内建函数(字符串处理)
Python的字符串内建函数这些方法实现了string模块的大部分方法 , 如下表硕士列出了目前字符串内建支持的方法 string = 'XXX' string.capitalize() # 把字符串 ...
- ECMAscript5 新增数组内函数
indexOf() 格式:数组.indexOf(item, start) 功能:从start这个下标开始,查找item在数组中的第一次出现的下标. 参数:item 我们要去查找的元素 start从哪个 ...
- MVC开发中的常见错误-03-System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
return Db.SaveChanges()>0; return CurrentDBSession.SaveChanges(); RoleInfoService.EditEntity(role ...
- 2018-2019 2 20165203 《网络对抗技术》Exp5 MSF基础
2018-2019 2 20165203 <网络对抗技术>Exp5 MSF基础 实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: ...
- SQL中Union与Union All的区别
在写SQL查询语句时,经常会碰到类似于这种的需求:查询年龄大于60岁的男职工以及所有出生于1950年的职工.在处理这种需求时,无法使用一条简单的SQL语句查询出所有满足条件的结果,此时就需要将这种需求 ...
- 转 关于Https协议中的ssl加密解密流程
关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...