为什么我的 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秒后退出;即使您的日志操作永远不会完成。

一个更优雅的解决方案可能会在日志操作完成或超时后立即退出,但我的代码只是为了示例