public SimpleCacheResult <T> Get <T>(string key)
        {
            var result = new SimpleCacheResult <T>()
            {
                IsCacheNull = true, ValueOrDefault = default(T)
            };

            if (_cache.ContainsKey(key))
            {
                result.ValueOrDefault = (T)_cache[key];
                result.IsCacheNull    = result.ValueOrDefault == null;
            }
            return(result);
        }
        public async Task <SimpleCacheResult <T> > GetCacheThenSourceAsync <T>(string key, Func <Task <T> > sourceDelegate)
        {
            var result = Get <T>(key);

            if (result.IsCacheNull &&
                sourceDelegate != null)
            {
                var source = await sourceDelegate();

                if (source != null)
                {
                    Set(key, source);
                    result = new SimpleCacheResult <T>
                    {
                        IsCacheNull    = false,
                        ValueOrDefault = source
                    };
                }
            }
            return(result);
        }