处理TPL任务中的异常时,我遇到了两种处理异常的方式。第一种在任务内部捕获异常,并像下面这样在结果中返回它:
第二种方法是文档中显示的方式,我认为这是正确的做法:
我在想第一种方法是否有问题?使用此技术时,我偶尔会收到“未处理聚合异常”异常,并想知道如何发生这种情况?为了澄清,我认为第二种模式更好,但我有一段代码使用第一种模式,并且我正在尝试找出它是否需要重新设计,即如果不是所有异常都能被捕获。
var task = Task<Exception>.Factory.StartNew(
() =>
{
try
{
// Do Something
return null;
}
catch (System.Exception e)
{
return e;
}
});
task.ContinueWith(
r =>
{
if (r.Result != null)
{
// Handle Exception
}
});
第二种方法是文档中显示的方式,我认为这是正确的做法:
var task = Task.Factory.StartNew(
() =>
{
// Do Something
});
task.ContinueWith(
r =>
{
if (r.Exception != null)
{
// Handle Aggregate Exception
r.Exception.Handle(y => true);
}
});
我在想第一种方法是否有问题?使用此技术时,我偶尔会收到“未处理聚合异常”异常,并想知道如何发生这种情况?为了澄清,我认为第二种模式更好,但我有一段代码使用第一种模式,并且我正在尝试找出它是否需要重新设计,即如果不是所有异常都能被捕获。