Napotkaliam kilka razy na błędy Collection was modified; enumeration operation may not execute
podczas zwracania wyników kwerendy LINQ w funkcji, jak ta ... (Dodam, że funkcja działa jako implementacja interfejsu, a wyniki opuszczają ten moduł zostać wykorzystane w innym.)Czy powinienem zawsze wywoływać .ToArray na wyniki zapytania LINQ zwrócone w funkcji?
Public Function GetTheFuzzyFuzzbuzzes() As IEnumerable(of FuzzBuzz) _
Implements IFoo.GetTheFuzzyFuzzBuzzes
Return mySecretDataSource.Where(Function(x) x.IsFuzzy)
End Function
mam, co do zasady, zawsze zadzwonić .ToArray
po powrocie wynik LINQ kwerendy w funkcji lub właściwości getter jeśli dane źródłowe ma potencjał, aby być zmienione? Wiem, że jest w tym trochę wydajności, ale mam przeczucie, że należy to zrobić, dlatego należy zawsze robić to, aby uniknąć czasowych problemów z łączeniem.
Edit:
Pozwól mi zrobić lepiej wyjaśniający domeny problemu.
Mamy graficzną implementację naszego głównego obszaru zainteresowania, który jest problemem optymalizacyjnym. Elementy są reprezentowane jako węzły grafów. Krawędzie ważone różnymi kosztami i inne parametry wyrażają związki między węzłami. Gdy użytkownik manipuluje danymi, tworzymy różne krawędzie i oceniamy różne opcje, które mogą podjąć w stosunku do bieżącego stanu, aby uzyskać informacje zwrotne na temat wyników każdej opcji. Zmiany dokonane w danych na serwerze przez innych użytkowników i programy są natychmiast przekazywane do klienta za pośrednictwem technologii push. Używamy wielu wątków ...
... wszystko to oznacza, że wiele rzeczy dzieje się w bardzo asynchroniczny sposób.
Nasz program jest podzielony na moduły (oparte na zasadzie pojedynczej odpowiedzialności) z projektem kontraktu i projektem wdrożenia w czasie rzeczywistym, co oznacza, że w dużym stopniu polegamy na interfejsach. Zwykle przesyłamy dane między modułami za pomocą IEnumerable (ponieważ są one niezmienne), ponieważ są one rodzaj-sortowania z.
Czy mógłbyś zamieścić małą, kompilowalną wersję programu, który to powieli? –
Niestety nasza baza kodów jest podobna do 50000+ LOC z 68 projektami, więc stworzenie dobrego przykładu będzie trudne. Zobacz rozwinięte szczegóły w pytaniu. –