0

我有 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..
            }

        }  
    }

我知道使用一些共享哨兵来确定何时停止线程,但我不明白如何在这里应用它?我应该如何处理这种情况,以便线程在其任务完成时优雅地中止......

4

0 回答 0