httpwebrequest
特定の範囲のページから数千のレコードを使用してWebサーバーにアクセスし、フェッチしたいと考えています。Webページへのヒットごとに15レコードがフェッチされ、Webサーバーにはほぼ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
}
}
スレッドの共有変数間に問題があります。スレッドセーフな手順にする方法を教えてもらえますか?