所以Thread.Sleep()很糟糕(http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx).
是否有任何建议的替代方法来模拟程序执行中的暂停?比如一个循环?虽然我认为这在初始化变量,检查bool条件等方面涉及很多开销.
谢谢
首先,我不是要问与C#相同的问题- Thread.Sleep的替代方案?,或替代在C#中的Thread.Sleep?.我不认为我使用它不正确,需要一个真正的替代特定情况.
在代码分析运行期间,我看到了一个令人惊讶的违规行为:
Thread.Sleep()的使用是有缺陷设计的标志.
我们都知道线程创建很昂贵,线程中的阻塞意味着池上的争用.我们也知道每个线程将分配一个兆内存,因此它应该有一个短的寿命,在UI上阻塞是邪恶的,使用睡眠时间是不可靠的等等.这导致我的观点,如果你真的需要执行睡觉,如果不是Thread.Sleep你应该使用什么?
Peter继续提到零睡眠是Thread.Sleep唯一正确使用放弃线程的时间片并允许其他线程处理的唯一正确用法.然后更可怕的是,这仅仅是因为非托管线程的限制,如果在CLR中重新实现将产生在应用程序中使用Thread.Sleep的副作用.事实上,常见的不良用法的所有要点都是不良用法的好例子.
我在生产代码中有以下情况,使用Thread.Sleep非常成功:
在这种情况下不使用Thread.Sleep,我还有其他选择吗?紧密的循环往往会让事情变得更糟,我不相信这会使它的使用变成"设计缺陷",尤其是因为UI上没有任何东西,只有后台线程.在多线程环境中等待其他事物以及影响代码的外部因素,这只是软件的本质,有时您需要等待......
我正在尝试创建一个每10分钟执行10个不同SQL查询的应用程序,并且在每个SQL查询之间应该有一个短暂的延迟(例如,1秒).
如果我尝试使用Thread.Sleep(1000);,其他计时器停止,整个应用程序冻结.
知道如何在不冻结应用程序或停止其他计时器的情况下执行此操作吗?