如何使用.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.