13
我有這樣的代碼,當只有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();
}
}
但是,如果我做兩個同時連接(開始在同一個瀏覽器第二版),第二個將不執行該工作直到第一次結束。
使用線程或錯誤任務結果時添加頁眉到Response
...
我怎樣才能使這樣我就可以在同一時間在同一個瀏覽器上執行2+下載?
也許看看做這個['任務'](http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.startnew.aspx)並旋轉你需要的。此外,您可以查看[本網站](http://www.codethinked.com/net-40-and-systemthreadingtasks)以獲取更多示例。 –
我可能是錯的,但我認爲你不必爲此使用多線程。服務器應該自動處理,即使它是一個巨大的文件。你如何測試它?如果他們從2臺不同的機器上進行測試並且仍然存在相同的問題呢? – urlreader
使用任務或線程,它在'Response.AddHeader(「Cache-control」,「private」)失敗;' 'ArgumentException,值不在預期範圍內。' – BrunoLM