Я столкнулся с несколькими случаями Collection was modified; enumeration operation may not execute
ошибок при возврате результатов запроса LINQ в функцию, например... (Я должен добавить, что функция действует как реализация интерфейса, а результаты оставляются. этот модуль для использования в другом.)
Public Function GetTheFuzzyFuzzbuzzes() As IEnumerable(of FuzzBuzz) _
Implements IFoo.GetTheFuzzyFuzzBuzzes
Return mySecretDataSource.Where(Function(x) x.IsFuzzy)
End Function
Должен ли я, как правило, всегда вызывать .ToArray
при возврате результата запроса LINQ в методе получения функции или свойства, если базовые данные могут быть изменены? Я знаю, что это несколько снижает эффективность, но у меня есть ощущение, что это безопасно , и поэтому его всегда следует делать, чтобы избежать проблем с временной связью.
Изменить:
Позвольте мне лучше объяснить проблемную область.
У нас есть основанная на графе реализация нашей основной области интересов, которая является проблемой оптимизации. Сущности представлены в виде узлов графа. Ребра, взвешенные с различной стоимостью и другими параметрами, выражают отношения между узлами. По мере того, как пользователь манипулирует данными, мы создаем разные грани и оцениваем различные варианты, которые он может выбрать в сравнении с текущим состоянием, чтобы дать ему обратную связь о результатах каждого варианта. Изменения, внесенные в данные на сервере другими пользователями и программами, немедленно распространяются на клиент с помощью технологии push. Мы используем много потоков...
... все это означает, что у нас есть много вещей, происходящих очень асинхронно.
Наша программа разделена на модули (на основе принципа единой ответственности )с контрактным проектом и решенным -проектом реализации -во время выполнения -, что означает, что мы в значительной степени полагаемся на интерфейсы.Обычно мы передаем данные между модулями, используя IEnumerable (, так как они вид -из -вид -из неизменяемый ).