когда родительский поток спит, подчиненные потоки тоже спят?
Теперь главный поток - это пользовательский интерфейс Я создаю 20 подпотоков внутри основного потока с фабрикой задач (назовем ее threads 2). Внутри этих 20 подпотоков я создаю еще 10 подпотоков опять же с фабрикой подпотоков (назовем их потоками 3)
Теперь внутри этих потоков 2 у меня есть бесконечный цикл. Внутри бесконечного цикла проверяется, завершен ли поток 3 или нет. Если он завершен, то уничтожаем завершенный поток и запускаем другой. Я использую 250 мс sleep для каждой проверки внутри бесконечного цикла while. Таким образом, когда поток 2 находится в спящем режиме, поток 3 также находится в спящем режиме или они независимы. Вот код, который вы можете увидеть.
while (true)
{
int irActiveThreadCount = 0;
int irFinishedLast = -1;
for (int i = 0; i < irPerMainSiteThreadCount; i++)
{
if (MainSitesTaskList[irWhichMainTask, i] == null)
{
irFinishedLast = i;
break;
}
if (MainSitesTaskList[irWhichMainTask, i].IsCompleted == true)
{
irFinishedLast = i;
break;
}
}
for (int i = 0; i < irPerMainSiteThreadCount; i++)
{
if (MainSitesTaskList[irWhichMainTask, i] != null)
if (MainSitesTaskList[irWhichMainTask, i].IsCompleted == false)
{
irActiveThreadCount++;
}
}
if (irFinishedLast > -1)
{
var newTask = Task.Factory.StartNew(() =>
{
fcStartSubPageCrawl(srMainSiteURL, srMainSiteId, irWhichMainTask);
});
lock (lockerMainSitesArray)
{
if (MainSitesTaskList[irWhichMainTask, irFinishedLast] != null)
MainSitesTaskList[irWhichMainTask, irFinishedLast].Dispose();
MainSitesTaskList[irWhichMainTask, irFinishedLast] = newTask;
}
}
Thread.Sleep(250);
srQuery = "myquery";
using (DataSet dsTemp = DbConnection.db_Select_Query(srQuery))
{
if (dsTemp != null)
if (dsTemp.Tables.Count > 0)
if (dsTemp.Tables[0].Rows.Count == 0)
{
break;
}
}
}