Response.Flush()仅适用于Firefox

San*_*ira 5 asp.net google-chrome internet-explorer-8

我正在尝试在做一些冗长的工作之前向客户端发送一些内容:

Response.Write("Processing...");
Response.Flush();
System.Threading.Thread.Sleep(5000);
Response.Write("Finish");
Response.End();
Run Code Online (Sandbox Code Playgroud)

在Firefox中,它按预期工作,但在IE8,Safari和Chrome中,它等待所有代码处理完毕,然后显示整个文本.

我尝试发送一个更好的HTML,如下面的示例,但我得到相同的结果:

Response.Write("<html><head><title>test</title></head><body>Processing...</body></html>");
Response.Flush();
System.Threading.Thread.Sleep(5000);
Response.Write("Finish");
Response.End();
Run Code Online (Sandbox Code Playgroud)

谢谢!

mfe*_*old 2

您面临的问题是您发送的响应仍然不完整。即使您将缓冲区中的所有内容刷新到浏览器,浏览器仍然需要等待响应结束或处理到目前为止所得到的内容 - 因此浏览器之间存在差异。

更糟糕的是,您可以预期位于服务器和浏览器之间的互联网上的一些中间节点集中器、防火墙等会出现相同的行为。

最重要的是,如果您想确保浏览器对您的数据流执行某些操作,则必须使用 Response.End 来完成它。

换句话说,如果您想先发送一些响应数据并延迟发送其余数据,您更好的选择是将响应分成两部分,完成第一部分并单独下载第二部分