我想在System.Threading.Tasks.Task.Factory.StartNew()中处理异常;

时间:2012-12-20 16:16:16

标签: c# .net asynchronous

我已经执行了下面的异步方法

System.Threading.Tasks.Task.Factory.StartNew(() => AddAttachment(information.Subject,
information.DocumentId.ToString(),
information.Sender,list.Name));

如何处理方法AddAttachment()中生成的异常?

3 个答案:

答案 0 :(得分:4)

您可以创建一个延续任务来检查您使用StartNew创建的那个:

Task outer = System.Threading.Tasks.Task.Factory.StartNew(() => AddAttachment(information.Subject, information.DocumentId.ToString(), information.Sender,list.Name))
    .ContinueWith(task => {
        if(task.IsFaulted)
        {
            AggregateException ex = task.Exception;
            //handle exception
        }
    });

答案 1 :(得分:1)

最简单的方法是创建一个延续并使用OnlyOnFaulted选项:

Task.Factory.StartNew(() => AddAttachment(information.Subject, information.DocumentId.ToString(), information.Sender,list.Name))
            .ContinueWith(t => HandleException(t.Exception),
                          TaskContinuationOptions.OnlyOnFaulted);

这样,只有在原始任务中抛出异常时才会调用continuation。

答案 2 :(得分:0)

任务完成后,

Task.Exception属性将包含异常异常,有关详细信息,请查看this

var task = Task.Factory.StartNew(...
...
task.Exception