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