// This function walks all watched files, collects changes, and updates state
        private FileChangeList ComputeChangesAndUpdateState()
        {
            _version++;

            var enumerator = new FileSystemChangeEnumerator(this, Path, EnumerationOptions);

            while (enumerator.MoveNext())
            {
                // Ignore `.Current`
            }
            FileChangeList changes = enumerator.Changes;

            foreach (FileState value in _state)
            {
                if (value._version != _version)
                {
                    changes.AddRemoved(value.Directory, value.Path);
                    _state.Remove(value.Directory, value.Path);
                }
            }

            return(changes);
        }