我有一个贯穿 500.000ish 列表的 for 循环。对于其中的每一个,它都在排队一个 SmartThreadPool 作业。
lines.Length
下面包含 500.000ish 项目。
我的问题是我在一次将它们全部排队时遇到内存问题。所以我虽然写了一个逻辑来防止这种情况:
int activeThreads = _smartThreadPool2.ActiveThreads;
if (activeThreads < maxThreads)
{
int iia = 0;
for (int i = 0; i < lines.Length; i++)
{
if (doNotUseAdditive.Checked == true)
{
foreach (string engine in _checkedEngines) // Grab selected engines
{
query = lines[i];
_smartThreadPool2.QueueWorkItem(
new Amib.Threading.Func<string, string, int, int, int>(scrape),
query, engine, iia, useProxies);
iia++;
}
}
}
}
else
{
// Wait
wait.WaitOne();
}
问题是我无法在我的 for 循环中运行该 if 语句,因为当我回到它时,它不会记住它在循环中的位置。
我正在使用:
ManualResetEvent wait = new ManualResetEvent(false); //global variable
到“暂停/恢复”
我需要在使用 X 线程后以某种方式暂停循环,然后当线程可用时返回并继续循环。
有任何想法吗?