2009-07-15 68 views
1

我做了一些代码清理,并遇到几个实例来的是否有任何合法的理由让System.Threading.Thread.Sleep在生产代码中?

System.Threading.Thread.Sleep(2000); 

这些都是在按钮单击事件。

我想不出为什么这会在生产代码?

我错过了什么吗?

编辑 -

完整的代码块(有些东西改变了,但步骤都是一样的) - 是的,我觉得它吮吸它做得太方式公顷

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

我想不出一个很好的理由,但我希望看到周围的代码来确认。 – 2009-07-15 20:26:47

+3

我已经在为我的整个代码库计划我的DailyWTF文章。 – 2009-07-15 20:32:34

+0

按钮点击处理程序做了什么? – RichardOD 2009-07-15 20:32:49

回答

5

一个可能的原因是在显示某些东西之前短暂延迟。

用户界面代码中有Sleep的问题是用户界面无响应。如果你想要这样的延迟,你可以使用定时器控制。这有点多,但用户体验最终会更好。

+0

原来睡眠被放入,以便“加载”屏幕可见,所以用户知道发生了一些事情。现在有了AJAX调用,我们故意放慢速度,让用户可以看到发生了什么。原始开发人员不知道进度控制和DispalyAfter =“0” – 2010-02-24 01:12:54

5

它看起来像speed-up loop的版本。没有标准的理由 - 很可能有人正在补偿某种时间问题。

+1

+1链接! – RichardOD 2009-07-15 20:30:54

1

唯一的原因是放慢速度(可能用于测试?),所以我不认为它应该在生产中。

0

我听说过一些人在睡眠代码中调用一个事件后补偿页面上的动画/视觉效果(进度条等)。

2

我已经使用Thread.Sleep等待轮询其他操作完成(通过计算的东西,轮询每个季度完成一次)。这就是说,我想不出有什么理由:在Web应用程序中的按钮处理程序中停留很长时间。虽然没有周围的代码,但是不能真正判断

0

在睡觉之前系统是否触发任何后端处理服务,并且正在寻找睡眠后更新后的数据/缓存无效?

1

也许他们正在复制和粘贴代码,如在代码项目中使用Thread.Sleep的this article

这听起来像是每日WTF的入口!

1

我见过有人用睡眠来延迟密码提交的请求/响应周期,从而防止暴力攻击。当然,一个锁定政策会实现同样的目标,而不是暂时拉动整个线程的插件。

0

我不确定该代码,换言之,这段代码System.Threading.Sleep(0)导致CPU上下文切换,即刷新代码..但是对于2000毫秒或2秒,听起来像程序员正在等待在从另一个类别获得​​之前的一段时间,大概称为Profile ....它在那里闻到竞态条件,我会问为什么等待2秒钟才能继续......

只是我的2分钱小费,

希望这有助于 最好的问候, 汤姆。

0

我正在研究连接到Web服务的ASP.NET应用程序。如果Web服务尝试频繁访问它,则会限制用户的速度。因此,我使用类似的睡眠呼叫,并在冷却期间禁用该按钮。

也许类似的东西?

相关问题