任务中的错误处理

本文关键字:处理 错误 任务 | 更新日期: 2023-09-27 18:16:50

我有以下代码

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响应并捕获异常?

任务中的错误处理

有几种方法可以处理这个问题。

你可以使用ContinueWith并在那里检查,或者你可以直接挂钩到全局任务异常处理程序TaskScheduler.UnobservedTaskException)。(详情待定)

ContinueWith:

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

或for与正常的try catch:

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

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

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