首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 爬蟲程式多線程控制實戰 (三)

     編輯:關於C語言

線程結束判斷策略

爬蟲線程持續尋找新連結,難以判斷何時結束。採用重試機制:

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 現代做法)
  • 實作生產者-消費者模式,配合 BlockingCollection
  • 加入請求頻率控制,避免被目標站點封禁
  • 異常處理與重試機制完善
  • 資源釋放確保:IDisposable 模式

開發環境

  • Windows XP SP2 Professional
  • Visual FoxPro 9.0
  • Visual Studio 2003 .NET 中文企業版

本文提供可行思路與方案,非最佳實踐。留待讀者思考改進空間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved