Исключение (я) Задачи не были обнаружены ни Ожиданием Задачи, ни доступом к ее свойству Исключения. - PullRequest
4 голосов
/ 08 февраля 2012

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

Исключение (я) Задачи не было обнаружено ни Ожиданием Задачи, ни доступом к ее свойству Исключение.В результате незамеченное исключение было переброшено потоком финализатора.

    var CrawlPage = Task.Factory.StartNew(() =>
{
    return crawlPage(srNewCrawledUrl, srNewCrawledPageId, srMainSiteId);
});

var GetLinks = CrawlPage.ContinueWith(resultTask =>
{
    if (CrawlPage.Result == null)
    {
        return null;
    }
    else
    {
        return ReturnLinks(CrawlPage.Result, srNewCrawledUrl, srNewCrawledPageId, srMainSiteId);
    }
});

var InsertMainLinks = GetLinks.ContinueWith(resultTask =>
{
    if (GetLinks.Result == null)
    {

    }
    else
    {
        instertLinksDatabase(srMainSiteURL, srMainSiteId, GetLinks.Result, srNewCrawledPageId, irCrawlDepth.ToString());
    }

});

InsertMainLinks.Wait();
InsertMainLinks.Dispose();

1 Ответ

6 голосов
/ 23 апреля 2012

Вы не обрабатываете никаких исключений.

Изменить эту строку:

InsertMainLinks.Wait();

TO:

try { 
    InsertMainLinks.Wait(); 
}
catch (AggregateException ae) { 
    /* Do what you will */ 
}

В общем случае: чтобы запретить финализатору перебрасывать любые необработанные исключения, возникающие в вашем рабочем потоке, вы можете:

Подождите в потоке и перехватите System.AggregateException или просто прочитайте свойство исключения.

EG:

Task.Factory.StartNew((s) => {      
    throw new Exception("ooga booga");  
}, TaskCreationOptions.None).ContinueWith((Task previous) => {  
    var e=previous.Exception;
    // Do what you will with non-null exception
});

OR

Task.Factory.StartNew((s) => {      
    throw new Exception("ooga booga");  
}, TaskCreationOptions.None).ContinueWith((Task previous) => {      
    try {
        previous.Wait();
    }
    catch (System.AggregateException ae) {
        // Do what you will
    }
});
...