我一直在我的自托管ServiceStack应用程序中使用这段代码来睡眠MainThread:
while (true)
{
Console.ReadKey();
}
但当应用程序从终端分离时(例如,由启动-停止守护进程启动),它不起作用,因为这个错误:https://bugzilla.novell.com/show_bug.cgi?id=689976
作为一个快速的解决方法,我将代码更改为:
while (true)
{
Thread.Sleep(100);
}
我看过那个线程。睡眠不应该这样使用。
当应用程序从终端分离并在mono上运行时,我如何正确地冻结主线程?
如果你在linux(或其他posix系统)上,而不是使用Console.ReadKey,你应该使用Mono.posix库来监听终止或终止信号,如ServiceStack wiki上的示例所示:
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;
}
}