我们运行一个C#控制台应用程序,启动多个线程来完成工作.主要功能看起来像这样:
try
{
DoWork();
}
catch (Exception err)
{
Logging.Log("Exception " + err.ToString());
}
Logging.Log("Finished");
Run Code Online (Sandbox Code Playgroud)
该DoWork()函数从数据库中读取新作业,并生成线程以分别处理一个工作项.从上周开始,应用程序开始神秘地消失.它从进程列表中消失,事件日志中没有条目.日志文件显示工作到某一点:它不记录异常,或"完成"行.
有关C#应用程序如何消失的任何线索?
编辑:线程创建如下:
new Thread(SomeObj.StartFunc).Start();
Run Code Online (Sandbox Code Playgroud)
当没有线程运行时,会发生一些消失.
PS我们安装了DebugDiag,其规则是在我们的程序崩溃时创建崩溃转储.当进程消失时,它没有创建任何转储文件.
你用来运行控制台应用程序的身份是什么?
此外,您可能希望使用SetConsoleCtrlHandler来捕获控制台事件.请查看此博客文章了解更多详情.当控制台应用程序在服务帐户下运行时,我们遇到了类似的问题,它偶尔会被终止.我不确定这是不是你遇到的.让我知道我可以发布一些代码.
更新:看起来您的场景类似于我们所经历的.在控制台事件处理程序中,您需要检查LogOff事件并返回true.看看这篇KB文章.
public static void inputHandler(ConsoleCtrl.ConsoleEvent consoleEvent)
{
if (ConsoleEvent == ConsoleCtrl.ConsoleEvent.CtrlLogOff)
return true;
return false;
}
Run Code Online (Sandbox Code Playgroud)