私はこのような機能を持っています:
private void GetRSS(int start, int end)
{
for (int i = start; i < end; i++)
{
string content = string.Empty;
using (WebClient client = new WebClient())
{
//some code here get html content
}
// some code here parse content
}
}
必要なすべてのデータを取得するための実行時間を最小限に抑えるために、関数を異なる範囲で同時に 4 回実行してから、結果をマージするか、スレッド セーフ リストまたは辞書を使用したいと考えています。
私の質問は、どうすればこの関数を 4 つの別々のスレッドで実行し、スレッドの 1 つがまだ機能しているかどうかを制御できるか、いつ終了するかを知ることができないかということです。
私の最初のアイデアは、各スレッドを宣言することでした:
private Thread _controler;
private Thread _worker1;
private Thread _worker2;
private Thread _worker3;
private Thread _worker4;
private bool _isRunning = false;
次に、コントローラーを起動し、コントローラー内から各スレッドを呼び出して上記の関数を実行し、コントローラーからの各スレッドを追跡します。次のようになります。
private void _ControlerStart()
{
_worker1 = new Thread(GetRSS);
try
{
_worker1.Start(1, 7711);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
// repeat the above to all the 4 threads
_isRunning = true;
while (_isRunning)
{
if (_worker1.ThreadState != ThreadState.Running && _worker2.ThreadState != ThreadState.Running && _worker3.ThreadState != ThreadState.Running && _worker4.ThreadState != ThreadState.Running)
_isRunning = false;
}
MessageBox.Show("Done");
}
上記のすべての混乱について考えていると、これは私が望んでいたことを行うための最良の方法ではないことに気付き、ここにいます;)。
複数のスレッドを管理して同じ関数を実行しながら、各スレッドがデータを閉じたり、保存したり、マージしたりする作業をいつ終了したかを知ることができるようにするにはどうすればよいでしょうか。