处理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的文章帮助我理解了任务。
TPL非常努力地为您处理异常,并将它们移出您的任务。
因此,虽然您可以在任务本身中捕获它们,但这应该是规则的例外。
一般情况下,您确实需要处理等待点周围的异常。在GUI上显示消息的情况下,可以立即消除Dispatch问题。