这就是我给出函数
的错误 var CrawlPage = Task.Factory.StartNew(() =>
{
return crawlPage(srNewCrawledUrl);
});
var GetLinks = CrawlPage.ContinueWith(resultTask =>
{
if (CrawlPage.Result == null)
{
return null;
}
else
{
return ReturnLinks(CrawlPage.Result, srNewCrawledUrl, srNewCrawledPageId);
}
});
这是错误我真的不明白这是怎么可能的。我正在使用本地分配的变量,因此变量应该对所有线程都是线程安全的。我不对吗?
这是错误图片:
答案 0 :(得分:1)
你最好在调用之前验证InnerHtml是否为null
var GetLinks = CrawlPage.ContinueWith(resultTask =>
{
if (CrawlPage.Result == null || CrawlPage.Result.DocumentNode == null || CrawlPage.Result.DocumentNode.InnerHtml == null)
{
return null;
}
else
{
return ReturnLinks(CrawlPage.Result, srNewCrawledUrl, srNewCrawledPageId);
}
});
或者在ReturnLinks方法
上查看答案 1 :(得分:1)
我正在使用本地分配的变量,因此变量应该对所有线程都是线程安全的。我不对吗?
您正在制作本地参考的事实并不意味着此参考指向的对象突然变为本地。其他线程(问题中没有显示?)可能仍然在错误的时刻(HtmlDocument
和hdDoc.DocumentNode != null
之间)改变hdDoc.DocumentNode.InnerHtml != null
对象。