为什么我的 C# 控制台应用程序在我尝试退出时挂起?
Why is my c# console application hanging when I try to exit?
我有一个控制台应用程序,当我发出以下两行时有时不会退出:
File.AppendAllText(@"\bbd\FLog", "Halting: " + DateTime.UtcNow.ToString("dd-MM-yyyy HH:mm:ss") + "\n");
System.Environment.Exit(0);
暂停消息已写入磁盘,但应用程序在任务管理器中仍然存在。
该应用程序确实使用了线程计时器:
GetRecordsTimer = new System.Threading.Timer(new TimerCallback(GetRecordsCallBack), null, 60000, 0);
声明为:
public static System.Threading.Timer GetRecordsTimer;
但我对 Environment.Exit(0) 的理解是,它会杀死一切(所有线程)然后退出。
注意:不仅应用程序仍然存在,而且我的日志文件 FLog 似乎正在使用中...
我马上退出,会不会AppendAllText不知何故没有完成?
根据您的描述,我认为对 \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秒后退出;即使您的日志操作永远不会完成。
一个更优雅的解决方案可能会在日志操作完成或超时后立即退出,但我的代码只是为了示例
我有一个控制台应用程序,当我发出以下两行时有时不会退出:
File.AppendAllText(@"\bbd\FLog", "Halting: " + DateTime.UtcNow.ToString("dd-MM-yyyy HH:mm:ss") + "\n");
System.Environment.Exit(0);
暂停消息已写入磁盘,但应用程序在任务管理器中仍然存在。
该应用程序确实使用了线程计时器:
GetRecordsTimer = new System.Threading.Timer(new TimerCallback(GetRecordsCallBack), null, 60000, 0);
声明为:
public static System.Threading.Timer GetRecordsTimer;
但我对 Environment.Exit(0) 的理解是,它会杀死一切(所有线程)然后退出。
注意:不仅应用程序仍然存在,而且我的日志文件 FLog 似乎正在使用中...
我马上退出,会不会AppendAllText不知何故没有完成?
根据您的描述,我认为对 \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秒后退出;即使您的日志操作永远不会完成。
一个更优雅的解决方案可能会在日志操作完成或超时后立即退出,但我的代码只是为了示例