当甚至“ try-catch”失败并出现System.AggregateException时

时间:2018-06-25 09:10:19

标签: android android-asynctask xamarin.android

我收到上述错误:System.AggregateException: One or more errors occurred.

此处有以下代码行:

    List<tblDeviceIds> installIDs = KumulosHelper.Functions.Device.GetDeviceIDsOfUser(toUser);

方法“ GetDeviceIdsOfUser”如下所示:

    public static List<tblDeviceIds> GetDeviceIDsOfUser(string username)
    {
        IDictionary<string, string> myDict = new Dictionary<string, string>();
        myDict.Add("username", username);
        return KumulosGeneral.getTblDeviceIds("getDeviceIDsOfUser", myDict);
    }

因此,实际上没有任何幻想。

有时,但仅在上述错误的CERTAIN用户上。因此,即使用户将为“ null”(以他永远不会那样),列表也不会返回任何内容。但是它崩溃了。这本身是我不太了解的事情,所以我所做的是:

        List<tblDeviceIds> installIDs = null;

        try
        {
            installIDs = KumulosHelper.Functions.Device.GetDeviceIDsOfUser(toUser);
        }
        catch
        {
            installIDs = null;
        }

这可以证明是解决方案,但是,它可以尝试,它崩溃,它永远不会陷入困境,它已经死了。 有人愿意解释吗?

谢谢!

O,也许这与在另一个线程上执行此操作有关?该函数将调用所有这些函数:

        await Task.Run(() =>
        {
            Intermediate.SendMessageToUser(toUsername, temp);
        });

如您所见,它在异步任务中……但这应该不是问题,对吧?

1 个答案:

答案 0 :(得分:1)

收到AggregateException的原因是因为该异常源自Task内部(可能在单独的线程上运行)。要确定原因,请沿行InnerException。

关于捕获未捕获,我的建议是:确保正在使用最新代码。添加跟踪而不是依赖断点。并查看是否从另一个线程引发了内部异常(GetDeviceIDsOfUser是否也在使用异步方法吗?)

另请参阅:Why is .NET exception not caught by try/catch block?