когда родительский поток спит, дочерние потоки также спят?
Теперь основной поток - это пользовательский интерфейс
Я создаю 20 подпотоков внутри основного потока с фабрикой задач (давайте вызовем потоки 2)
Внутри этих 20 подпотоков я снова создаю еще 10 подпотоков с под фабрикой (давайте назовем потоки 3)
Теперь внутри этой темы 2 у меня есть бесконечный цикл. Внутри бесконечного цикла проверяется, завершены ли потоки 3 или нет. Если выполнено, удалите завершенную нить и запустите другую. Я использую 250 мс сна для каждой проверки внутри бесконечного цикла. Таким образом, когда потоки 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;
}
}
}