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