servicestack,C#,Multithreading,Mono,servicestack" /> servicestack,C#,Multithreading,Mono,servicestack" />

C# 如何在脱离终端时为mono制作cpu友好的无限循环

C# 如何在脱离终端时为mono制作cpu友好的无限循环,c#,multithreading,mono,servicestack,C#,Multithreading,Mono,servicestack,在我的自托管ServiceStack应用程序中,我一直在使用以下代码睡眠主线程: while (true) { Console.ReadKey(); } 但由于以下错误,当应用程序从终端分离时(例如,由启动-停止守护程序启动),它不起作用: 作为快速解决方案,我已将代码更改为: while (true) { Thread.Sleep(100); } 我见过那条线。睡眠不应该用这种方式 当应用程序从终端分离并在mono上运行时,如何正确冻结主线程?如果您在linux(或其他po

在我的自托管ServiceStack应用程序中,我一直在使用以下代码睡眠主线程:

while (true)
{
    Console.ReadKey();
}
但由于以下错误,当应用程序从终端分离时(例如,由启动-停止守护程序启动),它不起作用:

作为快速解决方案,我已将代码更改为:

while (true)
{
    Thread.Sleep(100);
}
我见过那条线。睡眠不应该用这种方式

当应用程序从终端分离并在mono上运行时,如何正确冻结主线程?

如果您在linux(或其他posix系统)上,而不是使用控制台。ReadKey您应该使用库监听终止或终止信号,如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;
            }
        }
UnixSignal[]信号=新的UnixSignal[]{
新UnixSignal(Signum.SIGINT),
新UnixSignal(Signum.SIGTERM),
};
//等待unix信号
对于(bool exit=false;!exit;)
{
int id=UnixSignal.WaitAny(信号);
if(id>=0&&id
如果您在linux(或其他posix系统)上,而不是使用控制台。ReadKey您应该使用库收听终止或终止信号,如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;
            }
        }
UnixSignal[]信号=新的UnixSignal[]{
新UnixSignal(Signum.SIGINT),
新UnixSignal(Signum.SIGTERM),
};
//等待unix信号
对于(bool exit=false;!exit;)
{
int id=UnixSignal.WaitAny(信号);
if(id>=0&&id