public bool TryGetAllModelEntities( out Dictionary <long, ITopologyElement> topologyElements, out Dictionary <long, List <long> > elementConnections, out HashSet <long> reclosers, out List <long> energySources) { TopologyElements.Clear(); Measurements.Clear(); EnergySources.Clear(); ElementConnections.Clear(); MeasurementToConnectedTerminalMap.Clear(); TerminalToConnectedElementsMap.Clear(); BaseVoltages.Clear(); Reclosers.Clear(); bool success = true; try { logger.LogInfo("Getting all network model elements and converting them..."); GetBaseVoltages().Wait(); Parallel.For(0, ConcreteModels.Count, (i) => { var model = ConcreteModels.ElementAt(i); if (model != ModelCode.BASEVOLTAGE) { List <ModelCode> properties = modelResourcesDesc.GetAllPropertyIds(model); var elements = networkModelGDA.GetExtentValues(model, properties).Result; foreach (var element in elements) { TransformToTopologyElement(element); } } }); foreach (var measurement in Measurements.Values) { PutMeasurementsInElements(measurement); Provider.Instance.MeasurementProvider.AddMeasurementElementPair(measurement.Id, measurement.ElementId); } foreach (var element in TopologyElements.Values) { if (element.Measurements.Count == 0) { CreateNoScadaMeasurement(element); } } topologyElements = TopologyElements; elementConnections = ElementConnections; reclosers = Reclosers; energySources = EnergySources; } catch (Exception ex) { logger.LogError($"[NMSManager] Failed in get all network model elements. Exception message: {ex.Message}"); topologyElements = null; elementConnections = null; reclosers = null; energySources = null; success = false; } return(success); }