有没有合理的理由在生产代码中使用System.Threading.Thread.Sleep?

时间:2009-07-15 20:24:15

标签: asp.net performance multithreading

我正在做一些代码清理,我遇到了一些

的实例
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 { }
}

10 个答案:

答案 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应用程序。如果用户尝试过于频繁地访问它,则会对用户进行速率限制。因此,我使用类似的睡眠呼叫并在冷却期间禁用该按钮。

也许类似的东西?