爬蟲線程持續尋找新連結,難以判斷何時結束。採用重試機制:
string url = "";
int times = 0;
const int MAX_RETRIES = 10; // N 次
while (url == "")
{
url = getUrl.GetAUrl(/* 參數 */); // 嘗試獲取 URL
if (url == "")
{
times++;
if (times > MAX_RETRIES)
{
downloadThread[i].Abort(); // 終止線程
break;
}
continue; // 下一次嘗試
}
times = 0; // 成功獲取,重置計數器
// 處理獲取的 URL...
}
邏輯:連續 N 次無法獲取新 URL,視為任務完成,終止線程。
將線程宣告為類別層級陣列,便於統一管理:
for (int i = 0; i < threadCount; i++)
{
downloadThread[i].Abort(); // 逐個終止
}
CancellationToken 替代 Abort(.NET 現代做法)BlockingCollectionIDisposable 模式本文提供可行思路與方案,非最佳實踐。留待讀者思考改進空間。