我正在做一些代码清理,我遇到了一些
的实例System.Threading.Thread.Sleep(2000);
这些都在Button Click事件中。
我想不出为什么这会出现在生产代码中?
我错过了什么吗?
编辑 -
完全代码块(有些东西改变了,但步骤是一样的) - 是的,我认为这样做太糟糕了
protected void btnSubmit_Click(object sender, ImageClickEventArgs e)
{
try
{
System.Threading.Thread.Sleep(2000);
string guid = Profile.Auth.GUID;
activity act = new activity();
try
{
if (checkbox.Checked)
{
add.activity(true);
}
else
{
act.AddActivity(false)
}
LoadData();
}
catch (Exception ex)
{
Response.Write(ex);
}
}
catch { }
}
答案 0 :(得分:5)
它看起来像speed-up loop的版本。没有标准的原因 - 很可能有人在补偿某种时间问题。
答案 1 :(得分:5)
一个可能的原因是在显示某事物的结果之前短暂延迟。
在用户界面代码中使用Sleep
的问题是用户界面无响应。如果你想延迟,你会使用计时器控制。这是一项更多的工作,但最终用户体验更好。
答案 2 :(得分:2)
我已经使用Thread.Sleep等待轮询其他操作完成(传递一些东西进行计算,每四分之一轮询完成)。也就是说,我无法想到一个理由:在Web应用程序中,按钮处理程序中的那么长时间的停顿。但是,如果没有周围的代码,就无法判断。
答案 3 :(得分:1)
唯一的原因是减慢速度(可能用于测试?),所以我认为它不应该在生产中。
答案 4 :(得分:1)
也许他们正在复制和粘贴代码,例如在代码项目中使用Thread.Sleep的this article。
这听起来像是每日WTF的参赛作品!
答案 5 :(得分:1)
我看到人们使用睡眠来延迟密码提交的请求/响应周期,从而防止暴力攻击。当然,锁定策略会实现同样的目的,而不是暂时拔掉整个线程的插件。
答案 6 :(得分:0)
我听说有些人在调用事件后输入睡眠代码来补偿页面上的动画/视觉效果(进度条等)。
答案 7 :(得分:0)
系统是否会在进入睡眠状态之前触发任何后端处理服务,并且正在寻找在睡眠后无效的更新数据/缓存?
答案 8 :(得分:0)
我不确定那个代码,换句话说,这个代码System.Threading.Sleep(0)
导致CPU上下文切换,即刷新代码..但是2000毫秒或2秒,听起来像程序员在从另一个叫做guid
的班级获得Profile
之前等待了一段时间....它在那里闻到了一种竞争条件,我会质疑为什么要等待2秒再继续......
只是我的2点,
希望这有帮助, 最好的祝福, 汤姆。
答案 9 :(得分:0)
我正在开发一个连接到Web服务的ASP.NET应用程序。如果用户尝试过于频繁地访问它,则会对用户进行速率限制。因此,我使用类似的睡眠呼叫并在冷却期间禁用该按钮。
也许类似的东西?