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 })); }