如果在 ThreadPool 的线程正在写入文件时应用程序关闭,会发生什么情况?

What happens if an application is closed while a thread of ThreadPool is writing a file?

假设您使用ThreadPool执行一些操作,并假设每个操作都写入一个文件。 ThreadPool的所有线程都是后台线程,所以在关闭应用的时候会被终止。如果在 ThreadPool 的线程正在将文件写入磁盘时关闭应用程序会发生什么情况?

操作系统将关闭文件句柄作为终止进程的一部分。

  • 任何挂起的异步I/O将被取消
  • 写入缓冲区中未刷新的任何数据都会丢失

阅读有关 Foreground and Background threads

的 MSDN 文章

ThreadPool 线程是后台线程。来自文章:

When the runtime stops a background thread because the process is shutting down, no exception is thrown in the thread.

线程只是停止了。它执行一条指令,从不执行下一条。 FileStream 将作为 CLR 清理的一部分关闭。

您可以通过调用Environment.Exit(0) and Environment.Exit(1)方法轻松尝试这种情况(成功退出和错误退出)。我认为文件的所有句柄都将被删除,并且只保留已写入磁盘的数据,而不会刷新缓冲区。

自始至终,该文件可能会因一些奇怪的错误而变得无法访问,例如 The file is being used by another process 或在退出进程时出现错误的情况。