IndexOutOfRangeException
генерируется, когда «сделана попытка получить доступ к элементу массива с индексом, который находится за пределами массива».
Обратите внимание, что класс ArrayList
не является потокобезопасным. Возможно, что в многопоточных сценариях условия гонки приведут к ArrayList
попытке чтения / записи в резервный массив с индексами, которые находятся за пределами его диапазона.
Пример: один поток уменьшает размер базового массива (возможно, посредством вызова TrimToSize
) одновременно с добавлением другого потока в коллекцию. Теперь, если резервный массив работает на полную мощность, добавляющий поток будет пытаться расширить свою емкость (выделив новый массив) для размещения нового элемента. Одновременный TrimToSize
вызов затем отменяет этот эффект. Затем, к тому моменту, когда добавляющий поток попытается записать в массив, индекс, который он считал доступным , больше не будет доступен, что вызовет исключение.
Исправлено: Используйте потокобезопасные конструкции, соответствующие вашей ситуации.