【发布时间】:2022-02-25 21:38:40
【问题描述】:
我正在将一些服务器应用程序从 .NET Framework+WCF 移植到 .NET Core,但在管理服务器出口时遇到了问题。在我们当前的 WCF 服务器上,我们允许从 WCF 请求和控制台输入中退出:
static void Main()
{
hExit = new ManualResetEvent(false);
StartServer();
Console.WriteLine("Server started. Press [Enter] to quit.");
char key;
while((key=WaitForKeyOrEvent(hExit)) != '\0' && key != '\r') { }
Console.WriteLine();
StopServer();
}
private static char WaitForKeyOrEvent(System.Threading.WaitHandle hEvent)
{
const int Timeout = 500;
bool dueToEvent = false;
while(!Console.KeyAvailable)
{
if(hEvent.WaitOne(Timeout, false))
{
dueToEvent = true;
break;
}
}
char ret = '\0';
if(!dueToEvent)
{
ret = Console.ReadKey().KeyChar;
if(ret == '\0')
ret = char.MaxValue;
}
return ret;
}
...
class ServerObj : IMyWcfInterface
{
void IMyWcfInterface.ExitServer() { hExit.Set(); }
}
这种方法是否也适用于 .NET Core? (当然使用 WCF 以外的其他技术,因为它已被放弃)我隐约记得听说 KeyAvailable/ReadKey 可能不适用于 Docker 容器中的应用程序,而使用容器是迁移到 . NET 核心...
【问题讨论】:
-
通过命令杀死进程线程?
标签: asp.net-core console .net-5 dotnet-cli