2
我用來結束我的傳輸到客戶端通過沖洗和結束在下面的代碼。如果我之後直接使用`Response.End()`,`Response.Flush()`有意義嗎?
Response.Flush();
Response.End();
然而,它只是打我,Response.End()
刷新緩存內容到客戶端。那麼在序列中使用兩者有什麼意義?
我用來結束我的傳輸到客戶端通過沖洗和結束在下面的代碼。如果我之後直接使用`Response.End()`,`Response.Flush()`有意義嗎?
Response.Flush();
Response.End();
然而,它只是打我,Response.End()
刷新緩存內容到客戶端。那麼在序列中使用兩者有什麼意義?
總之,沒有,但有兩個之間的重要區別:
Response.Flush()
爲所有處理完成之前寫入的響應的部分有用的(即,如果響應緩衝被禁用)。 Flush()之後的任何代碼都將繼續執行,並且任何之前的Response.Write()都將刷新到客戶端。
Response.End()
更殘酷一點......它不僅會中止當前線程,而且會這樣做會拋出ThreadAbort異常並終止當前請求。除非您正確處理異常,否則Response.End()後面的任何代碼將永遠不會看到日光。
正如您所指出的那樣,End()將會沖洗緩衝內容。在一些情況下結束()實際上將調用Flush()在內部,具體地,如果上下文不撤銷:螺紋的
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();
}
}
}
是到Response.End異常結束和調用事件EndRequest。 Response.Flush:發送到客戶端的所有當前緩衝輸出力 – 2012-08-10 01:18:09
您應該在HttpApplication對象上使用'CompleteRequest()'來結束請求(並且如果需要,請繼續處理)。不要使用'Response.End'。閱讀原因。被接受的答案最終會使用它,但是有沒有一個很好的理由讓你使用異常來終止響應線程? – 2012-08-10 02:48:09
@AndrewBacker不,沒有。除非你指望「我一直這樣做,所以它會自動使用它」,這是一個非常好的理由。你的意思是應該先沖洗然後完成,對吧?我只會去Response.ContentType =「text/xml」;回覆於(GetXmlData()InnerXml。); Response.Flush(); Context.ApplicationInstance.CompleteRequest(); 偉大的信息。 – 2012-08-10 09:37:57