我有 n 个运行方法例程的线程。每个线程都运行搜索方法,并在给定范围内搜索项目,然后从 Web 服务器检索这些项目。但我相信他们会继续奔跑,即使范围已用尽。我正在使用 for 循环来确定线程何时应该停止搜索,但这不起作用。这就是我所拥有的:
在方法Start()
中,我计算了一个特定范围,并将该范围赋予一个线程,该线程将在这个给定范围内进行搜索。
public void Start()
{
this.totalRangePerThread = ((this.endRange - this.startRange) / this.subWorkerThreads.Length);
for (int i = 0; i < this.subWorkerThreads.Length; ++i)
{
var copy = startRange;
this.subWorkerThreads[i] = new Thread(() => searchItem(copy, this.totalRangePerThread));
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)
{
start++;
for (int activeListCount = 0; activeListCount < this.activeListItems.Count; ++activeListCount)
{
//further method calls here to webservers..
}
}
}
我知道使用一些共享哨兵来确定何时停止线程,但我不明白如何在这里应用它?我应该如何处理这种情况,以便线程在其任务完成时优雅地中止......