私は素晴らしい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+ スレッドのようにキューに入れるときに、ユーザーが待機する必要がある (インターフェイスがほとんどハングする) ことです。
理想的な解決策は、すでにキューに入れられているスレッドを開始させ、残りをバックグラウンドでキューに入れる方法です..しかし、どうすればこれを達成できるかわかりません..
何か案は?:)