Когда даже "try-catch" не удается с System.AggregateException - PullRequest
0 голосов
/ 25 июня 2018

Я получаю вышеуказанную ошибку: 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);
    }

Так что, на самом деле ничего особенного не происходит.

Иногда, но только на некоторых пользователей выше ошибка.Таким образом, даже если пользователь будет «нулевым», что, к слову, никогда не будет, список просто ничего не вернет.НО вместо этого он падает.Само по себе это то, что я не совсем понял, поэтому я сделал следующее:

        List<tblDeviceIds> installIDs = null;

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

Это обходной путь для пулевых проб, но все же: он пытается, он падает, никогда не попадает в ловушку,мертв.Кто-нибудь захочет объяснить?

Спасибо!

О, может быть, это как-то связано с выполнением этого в другом потоке?Это функция, которая вызывает все это:

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

Как видите, она находится внутри асинхронной задачи ... но это не должно быть проблемой, верно?

1 Ответ

0 голосов
/ 25 июня 2018

Причина, по которой вы получаете AggregateException, заключается в том, что исключение происходит изнутри Задачи (которая, вероятно, выполняется в отдельном потоке). Чтобы определить причину, пройдите линию InnerException (s).

Что касается улова, не улавливающего, мои предложения будут такими: Убедитесь, что используется последний код. Добавьте трассировку вместо того, чтобы полагаться на точки останова. И посмотрите, генерируется ли внутреннее исключение из еще одного потока (GetDeviceIDsOfUser также использует async?)

См. Также: Почему исключение .NET не перехватывается блоком try / catch?

...