我想使用httpwebrequest
并从给定范围的页面中获取数千条记录来访问 Web 服务器。对网页的每次点击都会获取 15 条记录,并且网络服务器上几乎有 8 到 10000 个页面。这意味着服务器总共有 120000 次点击!如果使用单个进程轻松完成,则该任务可能非常耗时。因此,多线程是想到的直接解决方案。
目前,我已经创建了一个用于搜索的工作类,该工作类将产生 5 个子工作者(线程)以在给定范围内搜索。但是,由于我在线程方面的新手能力,我无法使其工作,因为我无法同步并使它们一起工作。我知道 .NET 中的委托、操作、事件,但是让它们与线程一起工作变得令人困惑。这是我正在使用的代码:
public void Start()
{
this.totalRangePerThread = ((this.endRange - this.startRange) / this.subWorkerThreads.Length);
for (int i = 0; i < this.subWorkerThreads.Length; ++i)
{
//theThreads[counter] = new Thread(new ThreadStart(MethodName));
this.subWorkerThreads[i] = new Thread(() => searchItem(this.startRange, this.totalRangePerThread));
//this.subWorkerThreads[i].Start();
this.startRange = this.startRange + this.totalRangePerThread;
}
for (int threadIndex = 0; threadIndex < this.subWorkerThreads.Length; ++threadIndex)
this.subWorkerThreads[threadIndex].Start();
}
searchItem 方法:
public void searchItem(int start, int pagesToSearchPerThread)
{
for (int count = 0; count < pagesToSearchPerThread; ++count)
{
//searching routine here
}
}
线程的共享变量之间存在问题,谁能指导我如何使其成为线程安全的过程?