gpt4 book ai didi

c# - 递归函数 MultiThreading 一次执行一个任务

转载 作者:太空宇宙 更新时间:2023-11-03 19:34:08 24 4
gpt4 key购买 nike

我正在编写一个程序来抓取网站。爬取功能是递归的,可能需要更多的时间才能完成,所以我使用多线程对多个网站进行爬取。 我真正需要的是,在完成一个网站的抓取后,它会调用下一个网站(应该在 Queqe 中),而不是一次抓取多个网站。我正在使用 C# 和 ASP.NET。

最佳答案

这样做的标准做法是使用 blocking queue .如果您使用的是 .NET 4.0,那么您可以利用 BlockingCollection类,否则您可以使用 Stephen Toub 的实现。

您要做的是根据您的需要启动尽可能多的工作线程,并让它们在无限循环中运行,使出现在队列中的项目出队。您的主线程将对项目进行排队。阻塞队列旨在等待/阻塞出列操作,直到项目可用。

public class Program
{
private static BlockingQueue<string> m_Queue = new BlockingQueue<string>();

public static void Main()
{
var thread1 = new Thread(Process);
var thread2 = new Thread(Process);
thread1.Start();
thread2.Start();
while (true)
{
string url = GetNextUrl();
m_Queue.Enqueue(url);
}
}

public static void Process()
{
while (true)
{
string url = m_Queue.Dequeue();
// Do whatever with the url here.
}
}
}

关于c# - 递归函数 MultiThreading 一次执行一个任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3035686/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com