请考虑以下情况。
我有一个Task,它返回一个对象,让我们说它是类型:
class A
{
string success;
}
现在任务的主体就是:
{
return new A() { success = "yes" }
}
这项任务的外部并不重要,如果它是连续的任务或任何事情。重要的是,从该任务返回后,我可以通过task.Result.status读取这个返回的对象。
我遇到的问题是,如果我想在try / catch块中返回那种对象,则task.Result.status为null,而task.Result属于AggregatedException类型。例如:
//(Task body)
{
{
try
{
//something throwing exception
}
catch(Exception exc)
{
return new A() { success = "yes" }
}
}
我正在寻找一种方法来获取catch块中返回的对象,当执行从该任务返回时,而不是我现在收到的AggregatedException。
请从限制用户论坛“回答”,例如“你为什么要这样做”,“它有什么意义”等等。我对这样的答案不感兴趣。
如果无法完成并且您知道它的事实(可能抛出异常的任务总是返回AggregatedException,无论如何),那么请告诉我这么简单。另一方面,如果可以的话,我会嘲笑如何实现这一目标。
卢卡斯
答案 0 :(得分:1)
您的问题可以更好地解释,但据我了解,这是您想要做的事情并且应该有效。
//(Task body)
{
A result = null;
try
{
//something that might throwing exception but could also new the result
}
catch(Exception)
{
result = new A() { success = "yes" }
}
return result;
}
在Task中捕获的异常不应传播到AggregateException。如果仍然发生这种情况,那么代码中的其他地方就会出错。
答案 1 :(得分:0)
我的情绪最好。
一如既往,问题是我以前无法看到的。
我试图简化我的问题以找到问题的根源,这就是为什么代码在上面是如此基本。事实证明,Task异常处理非常复杂,特别是当我们处理内部任务和Wait调用时。
我正在调用innerTask.Wait()方法,该方法抛出了Aggregate异常。
http://msdn.microsoft.com/en-us/library/dd235635.aspx
即使innerTask执行正在运行,并且它正在撤回对象,外部任务也在处理异常之前。
一旦我意识到这一点,修复非常简单易行。