¿Response.End () se considera dañino?

Este artículo de KB dice que ASP.NETResponse.End() aborta un hilo.

Reflector muestra que se ve así:

public void End()
{
    if (this._context.IsInCancellablePeriod)
    {
        InternalSecurityPermissions.ControlThread.Assert();
        Thread.CurrentThread.Abort(new HttpApplication.CancelModuleException(false));
    }
    else if (!this._flushing)
    {
        this.Flush();
        this._ended = true;
        if (this._context.ApplicationInstance != null)
        {
            this._context.ApplicationInstance.CompleteRequest();
        }
    }
}

Esto me parece bastante duro. Como dice el artículo de KB, cualquier código en la aplicación siguienteResponse.End() No se ejecutará, y eso viola el principio de menos asombro. Es casi comoApplication.Exit() en una aplicación de WinForms. La excepción de cancelación de hilo causada porResponse.End() no es capturable, por lo que rodea el código en unatry...finally no va a satisfacer

Me hace preguntarme si siempre debo evitar.Response.End().

¿Alguien puede sugerir, cuando debería usarResponse.End(), cuandoResponse.Close() y cuandoHttpContext.Current.ApplicationInstance.CompleteRequest()?

árbitro:Entrada de blog de Rick Strahl.

Basado en la entrada que he recibido, mi respuesta es,Sí,Response.End Es dañino, pero es útil en algunos casos limitados.

utilizarResponse.End() como un lanzamiento incomparable, para terminar inmediatamente elHttpResponse En condiciones excepcionales. Puede ser útil durante la depuración también.EvitarResponse.End() para completar las respuestas de rutina.utilizarResponse.Close() Para cerrar inmediatamente la conexión con el cliente. Poresta entrada de blog de MSDN, este métodono está diseñado para el procesamiento normal de solicitudes HTTP. Es muy poco probable que tenga una buena razón para llamar a este método.utilizarCompleteRequest() para finalizar una solicitud normal.CompleteRequest hace que la tubería de ASP.NET salte a laEndRequest evento, después del actualHttpApplication el evento se completa. Así que si llamasCompleteRequestLuego, escriba algo más en la respuesta, la escritura se enviará al cliente.

Edición - 13 de abril de 2011

Más claridad está disponible aquí:
- Publicación útil en el blog de MSDN
- Análisis útil por Jon Reid

Respuestas a la pregunta(8)

Su respuesta a la pregunta