類似IDM下載器的動態分段下載
用C#實作
假設有8個執行緒同時運行,檔案分塊給8個執行緒下載(range頭),這8個執行緒下載時假設有些下載快有些下載慢,當某個執行緒下載完成后,這個執行緒也就閑置下來了
這個閑置的執行緒會獲取其他執行緒下載剩余量(有個閾值,比如其他還在下載的如A執行緒檔案塊還剩余大于200K需要下載),符合這個設定的閾值后這個閑置執行緒就會獲取該200K的一半下載,原先A執行緒結束下載的下標同時調整;
問:閑置執行緒該怎么獲取其他正在下載的執行緒并判斷閾值后調整下標,且閑置執行緒繼續下載?
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://download-cf.jetbrains.com/idea/ideaIU-2021.1.exe");
request.Method = "GET";
request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36 Edg/89.0.774.75";
request.AllowAutoRedirect = false;
request.Timeout = 10000;
request.AllowAutoRedirect = true;
request.AddRange(starIndex, endIndex);
WebResponse wb = request.GetResponse();
using (Stream stream = wb.GetResponseStream())
{
byte[] buffer = new byte[102400];
string fileName = Path.Combine(saveFilePath, $"{i}.fk");
using (Stream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write)) {
long offset;
while (stream != null && (offset = stream.Read(buffer, 0, buffer.Length)) > 0)
{
fs.Write(buffer, 0, (int)offset);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/274954.html
標籤:C#
上一篇:微信小程式error WAService.js:2 ReferenceError: Data is not defined
下一篇:VB.NET把多個combobox條件查詢到的資料一起用datagridview顯示,為什么我的點查詢后datagridview不顯示資料。
