我有这段代码,当同时只有1个下载在运行时它是有效的
using (System.IO.FileStream fs = System.IO.File.OpenRead(@"C:\HugeFile.GBD"))
{
using (System.IO.BinaryReader br = new System.IO.BinaryReader(fs))
{
Response.AddHeader("Cache-control", "private");
Response.AddHeader("Content-Type", "application/octet-stream");
Response.AddHeader("Content-Length", fs.Length.ToString());
Response.AddHeader("Content-Disposition", "filename=HugeFile.GBD");
Response.Flush();
float kbs = 20f;
while (fs.Position < fs.Length)
{
if (!Response.IsClientConnected)
break;
byte[] bytes = br.ReadBytes((int)Math.Truncate(1024 * kbs));
char[] c = UTF8Encoding.Default.GetChars(bytes);
Response.Write(c, 0, c.Length);
Response.Flush();
System.Threading.Thread.Sleep(1000);
}
Response.Flush();
}
}
但是,如果我同时进行两个连接(在同一个浏览器上开始第二个下载),第二个连接直到第一个完成后才会执行。
使用线程或任务时,在向响应添加标头时会出现错误...
我该如何使得我能够在同一浏览器上同时执行2个或更多的下载?
Task
,并启动所需的任务。此外,您还可以查看此网站获取更多示例。 - Jon PetersonFile.OpenRead
应该使用FileAccess.Read
,这将允许另一个进程或应用程序在此操作挂起时访问该文件。这可能不是我最初想到的文件访问限制。 - Brad Christiepublic ActionResult GetFile2() { Thread.Sleep(5000); return new ContentResult(); }
也就是说,在同一浏览器中连续调用两次,这些调用是顺序执行的。从IE和Chrome中调用,则这些调用是并行执行的。 - wal