我有这样的功能:
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 个单独的线程中运行此函数,并且仍然能够控制其中一个线程是否仍在工作或不知道它何时结束?
我的第一个想法是声明每个线程:
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");
}
在思考上面的所有这些混乱时,我意识到这不是做我想做的事情的最佳方式,我在这里;)。
如何管理超过 1 个线程来运行相同的功能,同时又能够知道每个线程何时结束关闭或保存或合并数据或执行我在主线程中剩下的任何事情?