Naudio Reader <WaveStream>проблема сбоя списка [Состояние гонки] - PullRequest
0 голосов
/ 10 октября 2018

У меня есть Webstream reader<WaveStream> list, и я избавляюсь от WaveStream, используя цикл foreach, как упомянуто ниже

foreach (WaveStream ws in readers)
    ws.Dispose();

, но reader<WaveStream> list изменяется другим методом в то же время, когда цикл foreach, располагающий объект, следовательно, мыполученный необработанный сборник исключений был изменен другим методом, и наше приложение упало

Не могли бы вы предоставить какое-нибудь объяснение или ссылку с объяснением, как наша проблема с сбоем была решена после использования цикла for, как указано ниже?

for (int i = 0; i <= readers.ToArray().Length - 1; i++)
{
   readers[i].Dispose();
}

Я не могу понять, как цикл for и readers.ToArray() решили проблему сбоя.

1 Ответ

0 голосов
/ 15 октября 2018

Если List<T> изменяется, пока вы через него foreach, вы получите исключение, так как базовая коллекция изменилась.Таким образом, в вашем случае либо другой поток изменял список, пока вы выполняли его итерацию, либо само действие «Удаление потоков» модифицировало список.Вызывая ToArray, вы создаете новый массив, который является копией исходного списка.Никто другой не имеет доступа к этому массиву, поэтому его содержимое не изменится, пока вы итерируете его.

...