可能重复:
Compare using Thread.Sleep and Timer for delayed execution
我正在考虑是否在我的ASP.NET Web应用程序中使用System.Threading.Timer或Thread.Sleep。我寻找他们的不同之处。期间或睡眠时间为100毫秒。 AFAIK如果我使用Timer它不会阻止正在运行的线程,但Sleep将阻止正在运行的线程。
由于间隔非常小,选择Thread.Sleep(150)会不会更好?
编辑:我倾向于像非线程池线程上的计时器一样使用它。我知道Timers将在线程池上运行,但我不想为这样的操作保留线程池线程
答案 0 :(得分:5)
我建议阅读:
Comparing the Timer Classes in the .NET Framework Class Library
没有一个计时器会阻止正在运行的线程,但是由于应用程序主线程上的活动而打勾的频率不同,如上文所述。
您使用的确取决于您想要的最终结果!虽然Thread.Sleep
被大多数人视为反模式。
答案 1 :(得分:3)
Thread.Sleep()
有一些用途,至关重要。这些是很少的,如果你使用任何高于约1
的数字作为参数,你几乎肯定没有。
如果甚至可以使用计时器,那么你肯定没有。当备选方案甚至不困难时,不要阻止完美的线程。
请注意在前一个触发器仍在运行时触发定时器的情况。根据操作的性质,您可能需要:
答案 2 :(得分:2)
请特别注意previous question & answer @EricRosenberger提供的答案,因为我相信它会回答您的问题。
关于你的情况,我相信你问的是this question you previously asked?即:你有一个使用线程的ASP.NET应用程序,并且CPU使用率很高,但是当使用Systen.Threading.Timer时它没有尖峰。对于当前的Q可能是偏离主题但是为了帮助你的整体情况你可能会发现,正如Eric Rosenberger所说,线程的创建和销毁可能是导致CPU峰值的原因而不是线程内运行的代码的实际实现。
致以最诚挚的问候,