一项任务';通过等待任务或访问其exception属性,未观察到s个异常
本文关键字:任务 属性 exception 观察 访问 异常 等待 一项 | 更新日期: 2023-09-27 18:23:41
这些是我的任务。我应该如何修改它们以防止出现此错误。我检查了其他类似的线程,但我使用的是等待并继续。那么这个错误是怎么发生的呢?
等待任务或访问其exception属性都没有观察到任务的异常。结果,终结器线程重新抛出了未观察到的异常。
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();
您没有处理任何异常。
更改此行:
InsertMainLinks.Wait();
收件人:
try {
InsertMainLinks.Wait();
}
catch (AggregateException ae) {
/* Do what you will */
}
一般来说:为了防止终结器重新抛出源自工作线程的任何未处理的异常,您可以:
等待线程并捕获System.AggregateException,或者只读取异常属性。
例如:
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
});
或
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
}
});