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他没有问你“睡眠的使用揭示了程序员使用它的什么?”