"using"程序强制关闭时是否阻塞释放资源

Does "using" block release resource when program force closed

按标题提问。

我有一段代码可以做到这一点:

    using (SqlConnection dbcon = new SqlConnection(connectionString))
    using (SqlDataAdapter dataAdapter = new SqlDataAdapter(statement, dbcon))
    {
        dat_set = new System.Data.DataSet();

        dbcon.Open();
        dataAdapter.Fill(dat_set, name);  
    }

当我在dataAdapter仍在填充数据集时强制退出程序时,程序冻结并停止响应。

我知道"using"当资源超出范围时会阻止释放资源,但是在强制终止的情况下,资源是否会正常释放?

如果进程退出,所有本机资源(网络句柄、文件句柄等)都会被操作系统清除。我不会 期望 using 声明在这里生效 - 我 怀疑 OS 会终止线程太难了,它没有机会自己进行清理。这意味着您最终仍会完成清理工作......但是您可能希望作为 using 语句的一部分发生的任何刷新(例如,在文件写入场景中)可能不会发生。

using 语句只是执行 try-finally 块的简单方法。所以真正的问题是如果你强制退出一个程序会 finally 阻塞 运行,答案是 "no".

但是,当程序终止时,所有外部句柄(包括您在代码示例中打开的数据库连接)都会被释放,因此您不会有孤立的数据库连接,即使 finally 块从来没有 运行 .当连接终止时,任何仍处于打开状态的事务都将回滚并撤消(即使您没有明确启动事务,所有请求都包含在隐式事务中)。