我一直在我的自托管 ServiceStack 应用程序中使用这段代码来休眠 MainThread:
while (true)
{
Console.ReadKey();
}
但是当应用程序从终端分离时它不起作用(例如由 start-stop-daemon 启动)因为这个错误:https://bugzilla.novell.com/show_bug.cgi?id=689976
作为快速解决方法,我已将代码更改为:
while (true)
{
Thread.Sleep(100);
}
我已经看到 Thread.Sleep 不应该这样使用。
当应用程序从终端分离并在单声道上运行时,我如何正确地卡住主线程?
最佳答案
如果您使用的是 linux(或其他 posix 系统),您应该使用 Mono.Posix 库而不是使用 Console.ReadKey 来监听终止或终止信号,如 ServiceStack wiki 上的 example 所示:
UnixSignal [] signals = new UnixSignal[] {
new UnixSignal(Signum.SIGINT),
new UnixSignal(Signum.SIGTERM),
};
// Wait for a unix signal
for (bool exit = false; !exit; )
{
int id = UnixSignal.WaitAny(signals);
if (id >= 0 && id < signals.Length)
{
if (signals[id].IsSet) exit = true;
}
}
关于c# - 从终端分离时如何为单声道制作 cpu 友好的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34113160/