private ReadInfo <TKey> StoreRead(TKey key) { byte[] data; return(_store.Read(log => { var mk = MapKeyToStoreAddress.TryGetValue(key); if (!mk.Item1) { return null; } var address = mk.Item2; Guid eTag; data = ReadData(address.Position, address.Size, address.Key, out eTag); return new ReadInfo <TKey> { Address = new StoreAddress <TKey> { Key = address.Key, Size = address.Size, Position = address.Position }, GetData = delegate { Guid etag; var retval = data ?? (data = ReadData(address.Position, address.Size, address.Key, out etag)); return retval; }, ETag = eTag }; })); }