Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用Response.Redirect()是否在using块调用的内部进行Dispose()?_C# - Fatal编程技术网

C# 调用Response.Redirect()是否在using块调用的内部进行Dispose()?

C# 调用Response.Redirect()是否在using块调用的内部进行Dispose()?,c#,C#,可能重复: 差不多。例如,如果我在using语句中与数据库建立了连接,并且在using语句中的某个地方我重定向到了另一个页面,它会放弃我的连接还是我必须先手动调用它?它会为您放弃连接。是的,它绝对会调用放弃。using语句的要点是在finally块中调用Dispose,因此无论该块是否正常完成,都将释放资源 在IIRC,响应中有一个轻微的褶皱。重定向抛出一个ThreadAbortException,如果被捕获,它将自动重新刷新,但这不会影响最终块。它将正确处理连接使用只是try/finally

可能重复:


差不多。例如,如果我在using语句中与数据库建立了连接,并且在using语句中的某个地方我重定向到了另一个页面,它会放弃我的连接还是我必须先手动调用它?

它会为您放弃连接。

是的,它绝对会调用
放弃
using
语句的要点是在
finally
块中调用
Dispose
,因此无论该块是否正常完成,都将释放资源


在IIRC,
响应中有一个轻微的褶皱。重定向
抛出一个
ThreadAbortException
,如果被捕获,它将自动重新刷新,但这不会影响
最终
块。

它将正确处理连接
使用
只是
try/finally
的语法糖分。如果要确认该行为,请替换using for
try/finally
。在执行重定向之前,它最终将跳转到

有几种情况下,
Dispose()
不会被调用:

应用程序将进入一个永远不会返回的无限循环。 应用程序无法正常关闭。
using
位于迭代器中,尚未实际输入using

您知道您没有前两个,因为您的进程既没有挂起也没有崩溃。
你知道你是第三个,因为重定向是在
中使用的
,所以不可能是这种情况。

请参阅链接问题中@JasonZ的注释:
调用响应。重定向不会执行finally块。
@mellamokb:我听起来不正确。看这篇文章,它不再包含被引用的文本。关于它有一个较长的部分,但它肯定没有说它“不会执行finally块”。是的,我也注意到了。多个答案都引用了这段文字,但当我在谷歌上搜索时,MSDN上没有一个引用这段文字。它一定曾经存在过,并且被改变了?编辑:确切的引用确实曾经存在:。很奇怪。。。自2008年以来,这方面有什么变化吗?@JonSkeet,From,“当引发此异常时,运行时会在结束线程之前执行所有finally块。因为线程可以在finally块中执行无界计算,或者调用thread.ResetAbort取消中止,因此无法保证线程会结束。”@罗杰:没错。所以基本上应该没问题。