任务中的错误处理
本文关键字:处理 错误 任务 | 更新日期: 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);