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