मैं इस कोड है, कि जब केवल 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 ("कैश-कंट्रोल", "निजी") में विफल रहता है; ' ' ArgumentException, मान अपेक्षित सीमा के भीतर नहीं आता है। ' – BrunoLM