in src/Microsoft.Extensions.Configuration.AzureAppConfiguration/AzureAppConfigurationProvider.cs [954:1024]
private async Task<bool> RefreshIndividualKvWatchers(
ConfigurationClient client,
List<KeyValueChange> keyValueChanges,
IEnumerable<KeyValueWatcher> refreshableIndividualKvWatchers,
Uri endpoint,
StringBuilder logDebugBuilder,
StringBuilder logInfoBuilder,
CancellationToken cancellationToken)
{
foreach (KeyValueWatcher kvWatcher in refreshableIndividualKvWatchers)
{
string watchedKey = kvWatcher.Key;
string watchedLabel = kvWatcher.Label;
KeyValueIdentifier watchedKeyLabel = new KeyValueIdentifier(watchedKey, watchedLabel);
KeyValueChange change = default;
//
// Find if there is a change associated with watcher
if (_watchedIndividualKvs.TryGetValue(watchedKeyLabel, out ConfigurationSetting watchedKv))
{
await TracingUtils.CallWithRequestTracing(_requestTracingEnabled, RequestType.Watch, _requestTracingOptions,
async () => change = await client.GetKeyValueChange(watchedKv, cancellationToken).ConfigureAwait(false)).ConfigureAwait(false);
}
else
{
// Load the key-value in case the previous load attempts had failed
try
{
await CallWithRequestTracing(
async () => watchedKv = await client.GetConfigurationSettingAsync(watchedKey, watchedLabel, cancellationToken).ConfigureAwait(false)).ConfigureAwait(false);
}
catch (RequestFailedException e) when (e.Status == (int)HttpStatusCode.NotFound)
{
watchedKv = null;
}
if (watchedKv != null)
{
change = new KeyValueChange()
{
Key = watchedKv.Key,
Label = watchedKv.Label.NormalizeNull(),
Current = watchedKv,
ChangeType = KeyValueChangeType.Modified
};
}
}
// Check if a change has been detected in the key-value registered for refresh
if (change.ChangeType != KeyValueChangeType.None)
{
logDebugBuilder.AppendLine(LogHelper.BuildKeyValueReadMessage(change.ChangeType, change.Key, change.Label, endpoint.ToString()));
logInfoBuilder.AppendLine(LogHelper.BuildKeyValueSettingUpdatedMessage(change.Key));
keyValueChanges.Add(change);
if (kvWatcher.RefreshAll)
{
return true;
}
}
else
{
logDebugBuilder.AppendLine(LogHelper.BuildKeyValueReadMessage(change.ChangeType, change.Key, change.Label, endpoint.ToString()));
}
}
return false;
}