CodeGo.net>如何使HttpResponse.Flush()异步?

如何使用.net 4.0及以上版本实现对HttpResponse.Flush()方法的异步调用VS2013?

我试过委托:

var caller = new AsyncFlush(context.Response.Flush);
var result1 = caller.BeginInvoke(null, null);
caller.EndInvoke(result1);

然后任务:

Task.Factory.StartNew(() => context.Response.Flush()).Start();

最后线程:

new Thread(new ThreadStart(() => context.Response.Flush()).Start();

但是在刷新大文件(1GB)时,每种情况似乎都冻结了我的Internet Explorer.任何想法?

问候.

解决方法:

您创建异步包装器的方法很好.但是,您应该了解以下几件事.

Response.Flush()强制将完整的缓冲区发送到客户端.因此,请避免避免一次在客户端上发送完整的1 Gig数据.这可能会使客户端处理该巨大的缓冲区,并可能导致挂起.

与其将巨大的缓冲区发送给客户端一次,不如尝试将流发送到多个块中并为每个块使用刷新,以使客户端在处理您的请求期间不会挂起.

有关使用Response.Flush多次将大文件大块写入响应的信息,请参见this KB.

上一篇:12 IO流(九)——装饰流 BufferedInputStream/OutputStream


下一篇:java-如何刷新DeflatorOutputStream中的缓冲数据