Response.Redirect(“”)在“using {}”里面

时间:2008-10-09 13:12:41

标签: .net using response.redirect

假设以下代码:

using (SqlConnection conn = new SqlConnection(connectionString))
{
   ...
   using (SqlCommand comm = new SqlCommand(...))
   {
      .. do stuff ..
      if(condition) Response.Redirect("somepage.aspx");

   }
}

Response.Redirect()退出using块会导致它处理掉所有连接吗?

或者,或者,有没有办法退出不会导致处理的使用块?

编辑:我不想在没有处置的情况下退出。我想知道任何导致它无法工作的陷阱。 - 当然,除非发生崩溃,但在那种情况下,我很确定所有的物品都处理好了 - 很难 -

我接受了一个答案,基本上说“我不知道”,但这是一个非常好的研究“我不知道”

对于平均时间,我将假设Response.Redirect在中心中止using语句和代码。 - 除非另有证明。

7 个答案:

答案 0 :(得分:4)

来自http://msdn.microsoft.com/en-us/library/aa973248.aspxhttp://msdn.microsoft.com/en-us/magazine/cc163298.aspx

  

调用Response.Redirect不会   执行finally块和   特定于语言的关键字,如C#   “使用”声明)。因此,   在任何重定向或转移之前   处理可以发生,你必须处置   对象。

但是来自http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx

  

拨打中止电话时   破坏线程的方法,常见的   语言运行时抛出一个   ThreadAbortException。   ThreadAbortException是一个特殊的   可以捕获的异常,但它   将自动再次提升   捕获块结束。 当这个   引发异常,运行时   之前执行所有finally块   结束线程。自线程以来   可以做一个无限的计算   最后阻止,或打电话   Thread .. ::。ResetAbort取消   中止,不能保证   线程将永远结束。如果你想   等到中止的线程有   结束了,你可以打电话给   Thread .. ::。Join方法。加入是一个   阻止不返回的呼叫   直到线程实际停止   执行。

听起来像是测试......

答案 1 :(得分:2)

问:或者,或者,有没有办法退出不会导致处理的使用块?

答:没有。

有关详细信息,请参阅此处:C# "Using" Syntax

答案 2 :(得分:2)

Response.Redirect终止服务器端执行。

在正常执行过程中,退出使用块会触发对象处理。例如,可能会出现此规则的例外情况。当进程关闭,计算机关闭,线程中止等等时,但不是正常的执行过程。

查看Server.Transfer。它可以帮助您实现目标。

答案 3 :(得分:1)

来自http://msdn.microsoft.com/en-us/library/aa973248.aspx

  

调用Response.Redirect不会   执行finally块。因此,   在任何重定向或转移之前   处理可以发生,你必须处置   对象。

是的,它没有直接解决Using语句,但它是一个常见的编程实践,需要注意。此外,该文章指的是SharePoint,但由于SP是基于ASP.NET 2.0构建的,我认为它仍然具有相关性。

答案 4 :(得分:0)

所有使用语句都是基于范围的。因此,无论您如何退出该功能,每个基于该点的堆栈都将从使用中清除。例外,退货等。

即使你出于某种原因,我也不知道有什么方法可以阻止你开枪。

答案 5 :(得分:0)

为什么要在没有处置的情况下退出使用区块?这不是使用块的想法。

如果你愿意,不要使用它,但我不推荐它。

答案 6 :(得分:0)

出了什么问题:

  

使用(SqlCommand comm = new SqlCommand(...))
  {
   ...
   如果(条件)
   {

     
    

//我们已经确定这是真的,所以我们不再需要使用了        //处置代码

  
     

中断;
     //或继续;如果那更好的话    }
   //在“if”不是真的情况下执行的代码   }

     

的Response.Redirect(页);“