处理Task中的异常

本文关键字:异常 Task 处理 | 更新日期: 2023-09-27 18:02:04

我想知道在wpf应用程序中编写这种代码是否正常,以便我可以捕获异常并在UI上显示一些消息:

Task.Factory.StartNew(() =>{                                              
    try
    {
        if (AuthenticationManager.Instance.Authenticate(username, password))
        {
            ... 
        }
        else
        {
            throw new AuthenticationException("Failed");
        }
    }
    catch (Exception ex)
    {
        Dispatcher.Invoke((Action)(() => txtWarning.Text = ex.Message));
    }
});

所以这段代码将在UI线程上显示错误消息。如果这是"OK",那么为什么每个人都建议使用t.Wait();,然后捕捉任务中出现的所有异常?
PS,可能问题是愚蠢的,但我没有找到适当的解释,我是新的使用任务。


这篇Joe Albahari的文章帮助我理解了任务。

处理Task中的异常

TPL非常努力地为您处理异常,并将它们移出您的任务。

因此,虽然您可以在任务本身中捕获它们,但这应该是规则的例外。

一般情况下,您确实需要处理等待点周围的异常。在GUI上显示消息的情况下,可以立即消除Dispatch问题。