SqlConnection构造函数中的异常导致finalize中的异常

时间:2014-08-27 06:12:45

标签: c# .net dispose sqlconnection finalizer

我有以下代码:

SqlConnection ret = new SqlConnection(connectionString);

这会抛出一个ConfigurationException但是,因为构造函数本身发生异常,ret为空/未分配,所以我无法调用Dispose/Close SqlConnection的新实例。

因此,在将来的某个随机时间,将调用已创建(但未分配给Finalize变量)ret实例的SqlConnection方法(最有可能来自单独的线程)抛出相同的ConfigurationException但我无法捕获它,因为它发生在不同的线程上。这会降低整个应用程序。

处理这种情况的正确编码方法是什么?

P.S。例外是因为machine.config文件中存在意外部分,但我们需要通过代码处理它,而不是要求客户修复machine.config文件。

1 个答案:

答案 0 :(得分:1)

我认为machine.config文件中的问题意味着应用程序根本无法运行是合理的。如果您的系统范围配置中断,您(该配置损坏的所有者)应该修复它。并非所有失败都可以在代码中正确处理。

我建议不要尝试解决这个问题,但要尽早检测,然后尽可能干净地中止。如果您意识到这可能是一个问题,您可能希望显式检查它 - 以您可以找到的方式无错误 - 立即启动,并且失败并提供非常好的错误消息和建议。作为一个用户,我通常会在早期采取明确的步骤来解决问题,而不是试图跛行,但是由于处于一个基本的敌对环境中而做得很差。

你应向Microsoft报告此问题,因为SqlConnection终结器在构造函数甚至没有完成时抛出异常是非常讨厌的。