我使用以下代码通过刷新和结束来结束向客户端的传输。
Response.Flush();
Response.End();
但是,它只是让我Response.End()
将缓冲的内容刷新到客户端。那么按顺序使用两者有什么意义吗?
简而言之,不,但两者之间存在重要差异:
Response.Flush()
对于在所有处理完成之前写入响应的部分很有用(即,如果禁用响应缓冲)。Flush() 之后的任何代码都将继续执行,并且之前的任何 Response.Write() 都将被刷新到客户端。
Response.End()
有点残酷......它不仅会中止当前线程,而且这样做会引发 ThreadAbort 异常并终止当前请求。除非您正确处理异常,否则 Response.End() 之后的任何代码都不会出现。
正如您所指出的, 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();
}
}
}