Чтение дважды из FileStream - PullRequest
       16

Чтение дважды из FileStream

1 голос
/ 15 марта 2012

У меня есть метод GetServiceMap (), который вызывает десериализатор, который затем открывает поток и читает что-то из него.

Проблема в том, что у меня есть метод GetAllGroups (), который также вызывает десериализатор через тот же поток.

Как бы это синхронизировать?С ManualResetEvent возможно?

public ServiceMapModel GetServiceMap()
    {
        s._mre.WaitOne();
        return s.Deserialize();
    }

public List<Group> GetAllGroups()
    {
        s._mre.WaitOne();
        return s.Deserialize().Groups;
    }

Способ десериализации:

public ManualResetEvent _mre = new ManualResetEvent(true);
public ServiceMapModel Deserialize()
    {
        _serviceMap = new ServiceMapModel();

        _mre.Reset();
        try
        {
            using (var fileStream = new FileStream(Settings.Path, FileMode.Open))
            {
                XmlReaderSettings settings = new XmlReaderSettings();
                settings.IgnoreComments = true;

                using (XmlReader reader = XmlReader.Create(fileStream, settings))
                {
                    _serviceMap = _serializer.Deserialize(reader) as ServiceMapModel;
                }

                fileStream.Close();
            }
        }
        catch (IOException)
        {

        }
        _mre.Set();

        return _serviceMap;
    }

1 Ответ

2 голосов
/ 15 марта 2012

Для вашего случая достаточно простого замка - нет причин использовать более сложные объекты.

Я бы на самом деле кэшировал результат десериализации вместо чтения из файла каждый раз, но это ваш вызов.

...