当父线程睡眠时子线程还睡觉吗?

Mon*_*RPG 6 c# wpf multithreading sleep task-parallel-library

当父线程睡眠时子线程还睡觉吗?

现在主线程是UI我在主线程中创建了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;
                }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 10

真的没有"父"线程这样的东西.一个线程启动另一个线程,但之后它们之间没有特定的关系.例如,起始线程可以在没有任何新线程死亡的情况下终止.

绝对的起始线程不会影响任何其他线程.