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