我正在使用奇妙SmartThreadPool
的方法来排队一堆解析任务。
所以基本上发生的情况是,当用户单击“开始”按钮时,程序将遍历不同的列表,并根据这些列表启动不同的作业(注意:这可以是 500.000 个作业)。
我是这样排队的:
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
button2.Enabled = true;
stpStartInfo.MaxWorkerThreads = Convert.ToInt32(parserThreadCount.Value);
stpStartInfo.MinWorkerThreads = 1;
_smartThreadPool2 = new Smart.SmartThreadPool(stpStartInfo);
........
foreach (string engine in _checkedEngines)
{
query = lines[i];
_smartThreadPool2.QueueWorkItem(
new Amib.Threading.Func<string, string, int, int, int>(scrapeFunction),
query, engine, iia, useProxies);
iia++;
}
}
所以问题是用户在排队时必须等待(界面几乎挂起)200.000+线程..
理想的解决方案是让已经排队的线程启动,然后在后台排队其余的线程..但不知道我怎么能做到这一点..
有任何想法吗?:)