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

时间:2015-02-19 14:56:58

标签: c# .net multithreading threadpool background-thread

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

3 个答案:

答案 0 :(得分:6)

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

  • 任何待处理的异步I / O都将被取消
  • 写入缓冲区中没有被刷新的任何数据都会丢失

答案 1 :(得分:3)

阅读Foreground and Background threads

上的MSDN文章

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

  

当运行时停止后台线程因为进程正在关闭时,线程中不会抛出任何异常。

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

答案 2 :(得分:2)

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

通过该文件可能会因为某些奇怪的错误(例如The file is being used by another process)或某些错误退出该过程而无法访问。