Как эта ошибка возможна в этом коде - ошибка: ссылка на объект не установлена ​​на экземпляр объекта - PullRequest
0 голосов
/ 16 октября 2011

Вот как я называю эту ошибку данной функцией

    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);
    }

});

Это ошибка, которую я действительно не понимаю, как это возможно.Я использую локальные назначенные переменные, поэтому переменные должны быть потокобезопасными для всех потоков.Я не прав?

Это изображение ошибки: enter image description here

Ответы [ 2 ]

1 голос
/ 16 октября 2011

Я использую локальные назначенные переменные, поэтому переменные должны быть безопасными для всех потоков.Я не прав?

Тот факт, что вы делаете локальную ссылку, не означает, что объект, на который эта ссылка указывает, внезапно становится локальным.Другой поток (не показанный в вашем вопросе?) Может все еще мутировать объект HtmlDocument в самый неподходящий момент (между hdDoc.DocumentNode != null и hdDoc.DocumentNode.InnerHtml != null).

1 голос
/ 16 октября 2011

вам лучше проверить, что InnerHtml равен нулю или нет перед вызовом

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...