Beispiel #1
0
        public Task RegisterSources(IEnumerable <IConfigurationSource> sources)
        {
            List <IConfigurationSource> initial;
            List <IConfigurationSource> tmp;
            var latch = new Latch();

            do
            {
                initial = _sources;
                tmp     = new List <IConfigurationSource>(initial);
                foreach (var source in sources)
                {
                    if (tmp.Contains(source))
                    {
                        break;
                    }
                    source.OnInitialized = () => latch.Decrement();
                    tmp.Add(source);
                    latch.Increment();
                }
            }while (Interlocked.CompareExchange(ref _sources, tmp, initial) != initial);

            EnsuresPolling();

            return(latch.Task);
        }