public async Task<string> GetAsync(string key)
        {
            string value = null;
            CachedApplicationSetting cachedSetting;
            if (_cachedSettings.TryGetValue(key, out cachedSetting))
            {
                if (cachedSetting.ExpiresAt > DateTimeOffset.UtcNow)
                {
                    value = cachedSetting.Value;
                }
            }

            if (value == null)
            {
                if (_localConfiguration != null)
                {
                    value = await _localConfiguration.GetAsync(key);
                }
                if (string.IsNullOrWhiteSpace(value))
                {
                    try
                    {
                        string keyVaultEncodedKey = _keyEncoder.Encode(key);
                        value = await _vault.GetSecretAsync(keyVaultEncodedKey);
                    }
                    catch (AggregateException ex)
                    {
                        KeyVaultClientException kex = ex.InnerExceptions.FirstOrDefault() as KeyVaultClientException;
                        if (kex != null && kex.Status == HttpStatusCode.NotFound)
                        {
                            value = null;
                        }
                        else
                        {
                            throw;
                        }
                    }
                }

                if (_cachePolicy != null)
                {
                    if (value != null || _cachePolicy.CacheNotFoundAsNull)
                    {
                        CachedApplicationSetting newSetting = new CachedApplicationSetting
                        {
                            ExpiresAt = DateTimeOffset.UtcNow.Add(_cachePolicy.ExpiresAfter),
                            Key = key,
                            Value = value
                        };
                        _cachedSettings.AddOrUpdate(key, newSetting, (k, e) => newSetting);
                    }
                }
            }

            return value;
        }