Система.Исключение InvalidOperationException: операция перечисления может не выполняться — выполняется с перерывами

#c# #asp.net #asp.net-web-api

Вопрос:

мы делаем вызов API и получаем ответ от скрипта. при его получении появляется ошибка

 {
    "ClassName": "System.InvalidOperationException",
    "Message": "Collection was modified; enumeration operation may not execute."
}
 

самое странное, что я не получаю эту ошибку регулярно, если я делаю 50 звонков между ними, я получаю эту ошибку (периодически), есть идеи ?

обновлено: это происходит после того, как мы получаем ответ от API, мы обрабатываем наш динамический запрос на основе ответа api следующим образом

  private JToken GetPEmail(dynamic verb, dynamic inputProfile)
        {
            verb.Log("GetProfileEmail Method", "Start", null, null, null, null, false);
            var emailList = new System.Collections.Generic.List<dynamic>();// creating custom response 

            foreach (var item in inputProfile.Emails)
            {
                verb.Log("Get EmailId for "   item, "start", null, null, null, null, false);
                var pID = GetEmailId(verb, Convert.ToString(item.EmailAddress)); // db call 
                emailList.Add(new
                {
                    EmailAddress = item.Email,
                    IsPreferred = item.IsP,
                    EmailPOCID = Convert.ToString(pID)
                });

                verb.Log("Get EmailId for "   item, "End", Convert.ToString(pID), null, null, null, false);
            }
 

Комментарии:

1. Вы изменяете коллекцию (добавляя или удаляя из нее элементы) во время итерации по ней ( foreach например , с помощью). Пожалуйста, предоставьте свой код API-сервера.

2. @Лама хорошо, но почему он приходит с перерывами , я имею в виду, что он должен приходить с каждым звонком правильно

3. Как я могу ответить на этот вопрос? Это зависит от кода вашего сервера API. Возможно, коллекция изменяется только в определенных сценариях.

4. @Llama обновил вопрос

5. Я ожидаю, что inputProfile.Emails это изменится, пока вы будете повторять это. Предположительно, где-то вне GetPEmail вас вы изменяете его одновременно с GetPEmail запуском.