我有一个控制台应用程序,当我发出以下两行代码时,有时不会退出:
File.AppendAllText(@"\\bbd\FLog", "Halting: " + DateTime.UtcNow.ToString("dd-MM-yyyy HH:mm:ss") + "\n");
System.Environment.Exit(0);
已将暂停消息写入磁盘,但该应用程序仍在taskmanager中运行。
该应用程序确实使用了线程计时器:
GetRecordsTimer = new System.Threading.Timer(new TimerCallback(GetRecordsCallBack), null, 60000, 0);
声明为:
public static System.Threading.Timer GetRecordsTimer;
我对Environment.Exit(0)的理解是杀死所有(所有线程)然后退出。
注意:不仅该应用程序仍在运行,而且我的日志文件FLog似乎正在使用中...
如果我之后立即退出,是否可能是AppendAllText未完成?
答案 0 :(得分:0)
根据您的描述,我认为对\\bbd
的网络写入操作尚未完成。
如果您要登录并退出,但是退出比登录更重要,请尝试执行以下操作:
ThreadPool.QueueUserWorkItem(state => {
Thread.Sleep(2000);
Environment.Exit(0);
});
File.AppendAllText(@"\\bbd\FLog", "Halting: " + DateTime.UtcNow.ToString("dd-MM-yyyy HH:mm:ss") + "\n");
这样,无论什么情况,您的过程都会在2秒内退出;即使您的日志操作从未完成。
日志操作完成或超时后,可能会退出一个更优雅的解决方案,但我的代码仅作为示例