当在try块内停止调试时,finally块会执行吗?

4

我在try块中打开了一个数据库连接。如果我进入try块,然后停止调试,finally块会被执行吗?换句话说,连接是否保持打开状态?


如果代码已经执行,您仍然可以调试 finally 块,但显然您无法这样做,因为应用程序已经关闭。 - MakePeaceGreatAgain
我看到你可以在数据库服务器中检查有多少连接是活动的。这样你就可以测试它了。如果你正在使用SQL Server,请参考此链接https://dev59.com/g3VC5IYBdhLWcg3wrDNd - kudlatiger
3个回答

4

不,如果你从调试器中终止应用程序,则不会执行finally块。整个进程都被终止了。这可能会导致未被释放的引用。(如果你只是分离,它会继续运行)

连接不会保持打开状态。服务器迟早会断开连接。


1
停止调试并不一定意味着进程已经终止。可能只是 Visual Studio 与进程的连接被中断了。 - Liam
我想我在考虑网络方面。如果是Web应用程序,在Visual Studio中按停止按钮不会终止进程,但在Windows中(已经有一段时间没有进行任何Windows开发了,所以我认为我说得没错...)它会。 - Liam
我明白你的意思。我猜问题不太清楚。 - Liam
我们可以在数据库服务器上看到活动连接 - 仅供测试。 - kudlatiger

4
如果你所说的“停止调试”是指停止应用程序,那当然不会停止(例如,在Visual Studio内部按下停止按钮来停止当前的调试会话)。这是通过按F5键启动控制台应用程序的典型情况。
如果你所说的“停止”是指从当前在VS之外启动的正在运行的应用程序中“分离”,则该程序将运行到其结束,并执行为其编程的所有操作。对于任何在IIS内部运行的Web应用程序也是如此(但不包括IIS Express)。

2

这取决于应用程序的类型:如果是 Web 应用程序,则剩余的代码将执行,因为它可以从生成的 .dll 文件访问。如果是 Windows 应用程序,则 finally 块将不会被执行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接