public void InvalidateEnumeratorsForFolder(Guid folderId)
        {
            lock (_stateChangeCriticalSection)
            {
                if (_foldersToIterators.ContainsKey(folderId))
                {
                    List <WeakReference <FolderContentsEnumerator> > allIteratorsForGivenFolder =
                        _foldersToIterators[folderId];

                    for (int i = 0; i < allIteratorsForGivenFolder.Count; i++)
                    {
                        WeakReference <FolderContentsEnumerator> enumeratorReference = allIteratorsForGivenFolder[i];
                        FolderContentsEnumerator enumerator = enumeratorReference.ReferencedObject;

                        if (enumerator == null) //Note: по идее такого все же быть не должно - итератор нам просигналит о завершении своего существования в любом случае.
                        {
                            enumeratorReference.Dispose();
                            allIteratorsForGivenFolder.RemoveAt(i);
                            i--;
                        }
                        else
                        {
                            enumerator.MarkAsInvalid(); // все: ходить по элементам больше не получится.
                        }
                    }

                    if (allIteratorsForGivenFolder.Count == 0)
                    {
                        _foldersToIterators.Remove(folderId);
                    }
                }
            }
        }