public void OnNext(CimInstance value) { var ns = $"{value.CimSystemProperties.Namespace}/{value.CimInstanceProperties["Name"].Value}"; _namespaces.AddOrUpdate(ns, i => new List <string>(), (a, b) => b); // collect classes var async = _session.EnumerateClassesAsync(ns); var observer = new GetClassObserver(_session, _namespaces); observer.Disposable = async.Subscribe(observer); // collect nested namespaces var async2 = _session.EnumerateInstancesAsync(ns, "__NAMESPACE"); var observer2 = new GetNamespaceObserver(_session, _namespaces); observer2.Disposable = async2.Subscribe(observer2); }