2

我使用以下代码通过刷新和结束来结束向客户端的传输。

Response.Flush();
Response.End();

但是,它只是让我Response.End()将缓冲的内容刷新到客户端。那么按顺序使用两者有什么意义吗?

4

1 回答 1

4

简而言之,不,但两者之间存在重要差异:

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();
        }
    }
}
于 2012-08-10T02:00:17.320 回答