private CacheEntry GetCacheEntry(string key)
        {
            try
            {
                _memoryCache.TryGetValue(key, out CacheEntry cacheEntry);
                string fileName = null;

                if (cacheEntry == null)
                {
                    fileName = GetFileName(key);
                    if (!File.Exists(fileName))
                    {
                        return(null);
                    }

                    byte[] file = File.ReadAllBytes(fileName);
                    cacheEntry                = CacheEntry.Deserialize(file);
                    _memoryCache[key]         = cacheEntry;
                    _esimatedUsedMemoryBytes += (cacheEntry as ResponseCacheEntry)?.Body?.Length ?? 0;
                    PurgeExcessMemoryAsync();
                }

                if (cacheEntry.Created.Add(cacheEntry.ValidFor) < DateTime.UtcNow || cacheEntry.ServerVersion != _versionIdentifier)
                {
                    _memoryCache[key]         = null;
                    _esimatedUsedMemoryBytes -= (cacheEntry as ResponseCacheEntry)?.Body?.Length ?? 0;
                    if (fileName != null)
                    {
                        File.Delete(fileName);
                    }

                    return(null);
                }

                cacheEntry.LastAccessed = DateTime.UtcNow;
                return(cacheEntry);
            }
            catch
            {
            }

            return(null);
        }