C# 在尝试线程连接之前是否需要睡眠?

C# 在尝试线程连接之前是否需要睡眠?,c#,multithreading,nullreferenceexception,C#,Multithreading,Nullreferenceexception,目前,我的程序中出现了一个奇怪的版本崩溃。它似乎在webageloader[i].Join()上抛出NullReferenceException但我似乎在调试中没有失败 我的问题是否与线程没有机会启动因此无法加入有关?有没有人知道我如何调试它,因为它似乎根本没有在调试中表现出来 如果我将sleep(50)放在webageloader[I].Join()之前它似乎没有崩溃。但是如果没有睡眠,我希望它不会崩溃 for (int i = 0; i < pagesToGet; i++) {

目前,我的程序中出现了一个奇怪的版本崩溃。它似乎在
webageloader[i].Join()上抛出
NullReferenceException
但我似乎在调试中没有失败

我的问题是否与线程没有机会启动因此无法加入有关?有没有人知道我如何调试它,因为它似乎根本没有在调试中表现出来

如果我将
sleep(50)
放在
webageloader[I].Join()之前它似乎没有崩溃。但是如果没有
睡眠
,我希望它不会崩溃

for (int i = 0; i < pagesToGet; i++)
{
    crawlContext.vistedURLs.AddURL(CurrentURL);                                
    document[i] = new DocumentToScrape();
    webPageLoader[i] = new Thread(document[i].LoadPage);
    webPageLoader[i].Start(CurrentURL);

    if (!crawlContext.unVistedURLs.MoveNext())
    {
        break;
    }
}

for (int i = 0; i < pagesToGet; i++)
{
    **webPageLoader[i].Join();**
    if (document[i].Doc != null)
    {
        document[i].Doc = GetSubSetXPath(document[i].Doc, crawlContext.xPath);                      
        if (document[i].Doc != null)
        {
            crawlContext.scrapedUrls = ScrapeURLS(crawlContext.scrapedUrls, document[i]);                                      
        }
        else
        {
            //System.Windows.Forms.MessageBox.Show("Null Page Found");
        }

    }
}
for(int i=0;i
乍一看,第一个循环中可能出现的
中断
可能意味着最终的线程数比第二个循环中预期的要少。在多线程程序中使用
睡眠
表明程序中存在错误。@johnsaunds听起来睡眠只是他们所做的一个故障排除步骤一种不同的行为。他说这不会因为睡眠而崩溃,若他相信这是一个可行的解决方案,他可能不会在这里寻求帮助。@AlG:不,只是经验而已。睡眠表示开发人员不理解多线程。@John他没有问你“睡眠的使用揭示了程序员使用它的什么?”