有时会遇到如下形式的代码:
while (true) {
//do something
Thread.Sleep(1000);
}
我想知道这是好的还是坏的做法,是否还有其他选择。
通常我在服务的主要功能中“找到”这样的代码。
我最近在 windows azure worker 角色的“运行”函数中看到了如下形式的代码:
ClassXYZ xyz = new ClassXYZ(); //ClassXYZ creates separate Threads which execute code
while (true) {
Thread.Sleep(1000);
}
我假设有更好的方法来防止服务(或 azure worker 角色)退出。 有人对我有什么建议吗?
最佳答案
好吧,当您使用 Thread.Sleep(1000)
执行此操作时,您的处理器会浪费一小段时间来唤醒并且什么都不做。
你可以用 CancelationTokenSource 做类似的事情.
当您调用 WaitOne()
时,它将等待直到收到信号。
CancellationTokenSource cancelSource = new CancellationTokenSource();
public override void Run()
{
//do stuff
cancelSource.Token.WaitHandle.WaitOne();
}
public override void OnStop()
{
cancelSource.Cancel();
}
这将防止 Run() 方法退出,而不会在忙等待中浪费您的 CPU 时间。
关于c# - "while(true) { Thread.Sleep }"的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23616506/