tag redirection equiv content .net using response.redirect

.net - redirection - Response.Redirect("") dentro de "using{}"



meta refresh url (7)

Supongamos el siguiente código:

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

¿El Response.Redirect () saldrá de los bloques que lo usan hace que elimine todas las conexiones?

O, como alternativa, ¿hay alguna manera de salir de un bloque de uso que no cause la eliminación?

EDITAR: No quiero salir sin desechar. Quiero estar al tanto de cualquier trampa que pueda causar que no funcione. - Excepto bloqueos, por supuesto, pero entonces estoy bastante seguro de que todos los objetos están dispuestos, de la manera más difícil, en esa situación

He aceptado una respuesta, que esencialmente dice "No sé", pero es un muy bien investigado "No sé"

Por el momento, voy a suponer que Response.Redirect cancela el uso de la instrucción y el código con eso en mente. - Hasta que se demuestre lo contrario.


¿Por qué le gustaría salir de un bloque de uso sin la eliminación? Esa no es la idea del bloque de uso.

No lo use si lo desea, pero yo no lo recomendaría.


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

Calling Response.Redirect NO ejecutará el bloque finally. Por lo tanto, antes de que pueda producirse una redirección o transferencia de procesamiento, debe deshacerse de los objetos.

Sí, no aborda directamente la instrucción Using, pero es una práctica de programación suficientemente común para tener en cuenta. Además, ese artículo se refiere a SharePoint, pero como SP se basa en ASP.NET 2.0, creo que sigue siendo relevante.


Desde http://msdn.microsoft.com/en-us/library/aa973248.aspx y http://msdn.microsoft.com/en-us/magazine/cc163298.aspx :

Calling Response.Redirect NO ejecutará el bloque finally ( y las palabras clave específicas del idioma, como la instrucción C # "using" ). Por lo tanto, antes de que pueda producirse una redirección o transferencia de procesamiento, debe deshacerse de los objetos.

Pero desde http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx :

Cuando se realiza una llamada al método Abortar para destruir un hilo, el tiempo de ejecución común del lenguaje arroja una ThreadAbortException. ThreadAbortException es una excepción especial que se puede capturar, pero se levantará automáticamente de nuevo al final del bloque catch. Cuando se produce esta excepción, el tiempo de ejecución ejecuta todos los bloques finally antes de finalizar el hilo. Como el hilo puede hacer un cálculo ilimitado en los bloques finally, o llamar a Thread .. ::. ResetAbort para cancelar el aborto, no hay garantía de que el hilo termine alguna vez. Si desea esperar hasta que el hilo abortado haya finalizado, puede llamar al método Thread .. ::. Join. Unirse es una llamada de bloqueo que no regresa hasta que el hilo realmente deja de ejecutarse.

Parece que una prueba está en orden ...


Qué hay de malo en:

utilizando (SqlCommand comm = new SqlCommand (...))
{
...
si (condición)
{

// Hemos decidido que esto es cierto, así que no necesitamos usar más
// Código de eliminación

descanso;
// o continuar; si eso es mejor
}
// Código que se ejecuta en el caso de "si" no es verdadero.
}

Response.Redirect (página); "

?


Response.Redirect finaliza la ejecución del lado del servidor.

En el curso normal de la ejecución, salir de un bloque de uso activa la eliminación de objetos. Se pueden producir excepciones a esta regla, por ejemplo, cuando el proceso se apaga, cuando la computadora se apaga, cuando se interrumpe un hilo, etc., pero no en el curso normal de la ejecución.

Mire en Server.Transfer. Puede ayudarte a lograr tus objetivos.


Todas las instrucciones de uso están basadas en el alcance. Así que no importa cómo salga de la función, todos los que estaban basados ​​en la pila en ese punto se limpiarán del uso. Excepciones, devoluciones, etc.

No sé de ninguna manera para evitar que alguien dispare, incluso si lo desea por alguna razón.


P: O, alternativamente, ¿hay alguna manera de salir de un bloque de uso que no cause la eliminación?

A: ninguno.

Vea esto para más información: C # "Usando" la sintaxis