BenBant genişliği nasıl sınırlanır ve bir dosya indirilirken birden fazla indirmeye izin verilir?
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();
}
}
Ama iki eşzamanlı bağlantı yaparsanız (aynı tarayıcı üzerinde ikinci bir indirmeye başlamak) ikincisi yürütmüyor yalnızca 1 indirme bir anda çalışırken o çalışıyor, bu kodu var ilk bitirene kadar. Bir ileti veya hatayla bir görev sonuçlarını kullanarak
Response
için Başlıkları eklerken ...
Ben bu yüzden aynı anda aynı tarayıcıda indirmeleri 2+ yürütebileceği nasıl yapabilirim?
Belki bu bir [Görev] (http://msdn.microsoft.com/en-us/library/system.threading.tasks.taskfactory.startnew.aspx) yapmak ve ihtiyacınız olanları döndürme içine bakmak . Ayrıca, daha fazla örnek için [bu siteyi] ziyaret edebilirsiniz (http://www.codethinked.com/net-40-and-systemthreadingtasks). –
Yanlış olabilirdim, ama bence bunun için multithread kullanmanız gerekmiyor. Sunucu otomatik olarak bununla başa çıkmalı, hatta büyük bir dosyadır. Nasıl test edersin? Ya 2 farklı makineden test ederse ve hala aynı sorunu varsa? – urlreader
Görevler veya iş parçacıklarını kullanarak, Response.AddHeader ("Önbellek denetimi", "özel"); 'ArgumentException, Değer beklenen aralıkta düşmez. ' – BrunoLM