private async Task RefreshIndividualKvWatchers()

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