Wird Response.End () als schädlich angesehen?

Dieser KB-Artikel sagt, dass ASP.NET istResponse.End() bricht einen Thread ab.

Reflektor zeigt, dass es so aussieht:

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();
        }
    }
}

Das kommt mir ziemlich hart vor. Wie der KB-Artikel sagt, folgt jeder Code in der AppResponse.End() wird nicht ausgeführt, und das verstößt gegen den Grundsatz des geringsten Erstaunens. Es ist fast soApplication.Exit() in einer WinForms-App. Die vom verursachte Thread-Abbruch-AusnahmeResponse.End() ist nicht abfangbar, daher umgibt der Code in atry...finally wird nicht befriedigen.

Ich frage mich, ob ich es immer vermeiden sollteResponse.End().

Kann mir jemand empfehlen, wann ich verwenden sollResponse.End(), wannResponse.Close() und wannHttpContext.Current.ApplicationInstance.CompleteRequest()?

ref:Rick Strahls Blogeintrag.

Auf der Grundlage der eingegangenen Eingaben lautet meine Antwort:Ja,Response.End Ist schädlich, aber es ist in einigen wenigen Fällen nützlich.

benutzenResponse.End() als ein uneinfangbarer Wurf, um das sofort zu beendenHttpResponse in außergewöhnlichen Bedingungen. Kann auch beim Debuggen nützlich sein.VermeidenResponse.End() Routineantworten zu vervollständigen.benutzenResponse.Close() um die Verbindung zum Client sofort zu beenden. Prodieser MSDN-Blog-Beitrag, diese Methodeist nicht für die normale Verarbeitung von HTTP-Anforderungen vorgesehen. Es ist sehr unwahrscheinlich, dass Sie einen guten Grund haben, diese Methode aufzurufen.benutzenCompleteRequest() eine normale Anfrage beenden.CompleteRequest Bewirkt, dass die ASP.NET-Pipeline vorwärts zurEndRequest Ereignis nach dem StromHttpApplication Veranstaltung abgeschlossen. Also, wenn Sie anrufenCompleteRequestSchreiben Sie dann etwas mehr auf die Antwort. Der Schreibvorgang wird an den Client gesendet.

Bearbeiten - 13. April 2011

Weitere Klarheit gibt es hier:
- Nützlicher Beitrag im MSDN Blog
- Nützliche Analyse von Jon Reid

Antworten auf die Frage(8)

Ihre Antwort auf die Frage