我一直在自托管的ServiceStack应用程序中使用以下代码来使MainThread休眠:
while (true)
{
Console.ReadKey();
}
但是由于以下错误,当应用程序从终端分离时(例如,由start-stop-daemon启动),它不起作用。
作为一种快速的解决方法,我已将代码更改为:
while (true)
{
Thread.Sleep(100);
}
我已经看到Thread.Sleep不应该以这种方式使用。
当应用程序从终端分离并在Mono上运行时,如何正确冻结主线程?
最佳答案
如果您使用的是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;
}
}