Možná objevuji Ameriku, ale přinejmenším vývojářům v Rebexu doporučuji tento článek přečíst a začít se jím řídit.
Response.End jsem dlouho nepotřeboval používat (kromě ukončování stránek při ladění) a setkávám se s ním teprve v poslední době, kdy jsme si navykli exportovat data z ASPX stránek dle následujícího scénáře:
(scénář je převzat přímo z jendoho dema k DevExpress PivotGridu)
MemoryStream vystup = ZiskejVystupniData();
Response.Clear();
//...nastavení Response HTTP headeru...
Response.BinaryWrite(vystup.GetBuffer);
Response.End();
Pokud na dané stránce explicitně odchytáváte výjimky, zjistíte, že hází ThreadAbortException
(pokud ale výjimku neodchytáváte, stránka nespadne a v vše funguje bez viditelných problémů).
Článek v MSDN bázi znalostí doporučuje namísto Response.End použít
HttpContext.Current.ApplicationInstance.CompleteRequest.
To obvykle zafunguje, dosud s tím nemám žádné negativní zkušenosti a doporučuji tento způsob preferovat.
Interní poznámka pro vývojáře v Rebexu:
Ukončování stránek pomocí HttpContext.Current.ApplicationInstance.CompleteRequest bohužel nezafunguje v starých projektech, kde se používá UcPage.
V takových situacích doporučuji odchytávat při volání Response.Endu výjimku ThreadAbortException a zahazovat ji.