【发布时间】:2019-06-12 14:47:39
【问题描述】:
我有一个控制台应用程序,当我发出以下 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 没有完成?
【问题讨论】:
-
Environment.Exit 不会终止线程,它只会终止您的应用程序。
-
@TonyAbrams 如果某些线程正在运行,应用程序不会终止,是吗?
-
@TonyAbrams 终止一个进程会导致该进程中的每个线程终止。如果这些线程不能被终止,那么进程也不能被终止。
-
它是 Windows 中的 known problem,它返回了几次。但在控制台模式应用程序中不太可能,下一个可能的原因是具有“深度扫描”功能的糟糕反恶意软件。