-2

请考虑以下情况。

我有一个任务,它返回一个对象,可以说它的类型:

class A
{
string success;
}

现在任务的主体是例如:

{
return new A() { success = "yes" }
}

该任务的外部无关紧要,如果它是连续任务或其他任何东西。重要的是,在从该任务返回时,我可以通过 task.Result.status 读取这个返回的对象。

我遇到的问题是,如果我想在 try/catch 块中返回该类型的对象,task.Result.status 为空,并且 task.Result 属于 AggregatedException 类型。例如:

//(Task body)
{
{
try
{
//something throwing exception
}
catch(Exception exc)
{
return new A() { success = "yes" }
}
}

当执行从该任务返回时,我正在寻找一种方法来获取在 catch 块中返回的对象,而不是我现在收到的 AggregatedException。

请克制自己不要使用通常的论坛“答案”,例如“你为什么想要它”、“它有什么意义”等。我对这样的答案不感兴趣。

如果它不能完成并且你知道这是一个事实(也许抛出异常时的任务总是返回 AggregatedException 无论如何),那么请直截了当地告诉我。另一方面,如果可以的话,我会很高兴我能做到这一点。

卢卡斯

4

2 回答 2

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;
}

任务中捕获的异常不应传播到 AggregateException。如果这种情况仍然发生,那么您在代码的其他地方做错了什么。

于 2012-11-29T11:30:11.700 回答
0

情绪对我来说是最好的。

与往常一样,问题是我以前看不到的。

我试图简化我的问题以找到问题的根源,这就是上面的代码如此基本的原因。事实证明,任务异常处理非常复杂,尤其是当我们处理内部任务和等待调用时。

我正在调用 innerTask.Wait() 方法,而该方法正在引发 Aggregate 异常。

http://msdn.microsoft.com/en-us/library/dd235635.aspx

尽管 innerTask 执行正在运行,并且它正在返回对象,但外部任务在此之前正在处理异常。

一旦我意识到这一点,修复就非常简单易行了。

于 2012-11-29T12:27:10.050 回答