任务中的错误处理

时间:2013-06-04 18:55:47

标签: c# error-handling task-parallel-library

我有以下代码

Task load = Task.Factory.StartNew(() => 
{
    Threading.Thread.Sleep(5000);
    throw new Exception("bad error");                
});

try{
    load.Wait();
}catch(AggregateException aex){
    MessageBox.Show("Error Caught!");
}

在这里,您可以看到,我创建了一个任务并抛出异常。 然后在UI线程上捕获异常。但是通过这个设置,UI将无法响应。

有什么方法可以让UI响应并捕获异常?

2 个答案:

答案 0 :(得分:3)

有几种方法可以解决这个问题。

你可以使用ContinueWith并在那里查看,或者你可以加入global task exception handler TaskScheduler.UnobservedTaskException)。 (详细信息)

ContinueWith仅用于异常处理:

load.ContinueWith(previousTask => 
    {
        //exception message here
    }, TaskContinuationOptions.OnlyOnFaulted);

或正常尝试捕获:

load.ContinueWith(previousTask => 
    {
        try
        {
            previousTask.Result
        }
        catch(Exception ex){//message here}
    });

答案 1 :(得分:1)

您需要为任务添加续集,而不是使用Wait或任何其他阻止任务的方法。

load.ContinueWith(t => MessageBox.Show(t.Exception.Message)
    , TaskContinuationOptions.OnlyOnFaulted);