我正在写一个应用程序,通过一个复杂的API使用一个庞大而丑陋的第三方系统。有时系统中会发生一些错误,但如果我们等待我的程序面对这些错误,就会为时已晚。
因此,我使用一个单独的线程来检查系统状态,如下所示:
while (true)
{
ask_state();
check_state();
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1));
}我是每100毫秒检查一次系统状态,还是每分钟检查一次,这都无关紧要。
但我听说使用Thread.Sleep()是一种糟糕的做法。为什么?在这种情况下我能做些什么呢?
发布于 2013-11-15 15:45:51
其中一个原因是Thread.Sleep()正在阻止您的代码执行其他任何操作。最近的努力是使阻塞尽可能少。例如,node.js是一种非阻塞语言。
更新:我不知道C#中 Timer 类的基础结构。也许它也被阻塞了。
您可以安排一个任务每隔100ms检查一次第三个API。这样,在这100ms内,您的程序可以执行其他任务。
更新:这个类比可能会有所帮助。如果我们将操作系统与医院进行比较,并将线程与医院中的护士进行比较,主管(程序员)可以选择一个策略:
Sleep()方法)第一个模型是阻塞。它是不可伸缩的。但在第二种模式中,即使只有很少的护士,你也可以为许多患者提供服务。
https://stackoverflow.com/questions/19995938
复制相似问题