Ejemplo n.º 1
0
        public IEnumerable <EventData> Read(string id)
        {
            AssertValidState();

            StreamInformation previous;
            Stream            stream;

            compactionLock.EnterReadLock();
            try
            {
                if (idToPos.TryGetValue(id, out previous) == false)
                {
                    return(null);
                }

                if (cachedReadStreams.TryDequeue(out stream) == false)
                {
                    stream = streamSource.OpenRead(dataPath);
                }
            }
            finally
            {
                compactionLock.ExitReadLock();
            }

            return(ReadInternal(stream, previous.LastPosition).Select(x => new EventData
            {
                Data = x.Data,
                State = x.State,
                Metadata = x.Metadata
            }));
        }