我正在用 C# 编写一个沉重的网络刮板。我希望它快速可靠。Parallel.Foreach 和 Parallel.For 太慢了。对于输入,我使用的是 URL 列表。我希望有多达 300 个线程同时工作(我的 cpu 和网络连接可以处理这个)。最好的方法是什么?使用任务会更好吗?有时线程会无缘无故地结束,并且某些结果不会被保存。我想要一种更可靠的方法来做到这一点。有任何想法吗?我想要一个更可靠的队列类型的抓取。我想出的(不是所有代码,而是重要部分):
List <string> input = // read text file
int total = words.Length;
int maxThreads = 300;
while (true)
{
if (activeThreads < maxThreads)
{
current++;
Thread thread = new Thread(() => CrawlWebsite(words[current]));
thread.Start();
}
}
public static void CrawlWebsite(string word)
{
activeThreads++;
// scraping part
activeThreads--;
}