JIT
Below function is not able to handle concurrent calls I need to Use IMemoryCache
Below function is not able to handle concurrent calls I need to Use IMemoryCache public async Task<FlexModelTotalMassFlow> GetFlexModels(CalculationParameters calculationParameters) { try { var flex = new List<MasterModel>(); var recommendedModels = new FlexModelTotalMassFlow(); var compressorConfig = await _coefficentUtil.GetCompressorConfig(calculationParameters.LowSaturationSuctionTemp, calculationParameters.MedSaturationSuctionTemp, calculationParameters.LowTempRequiredLoad, calculationParameters.MedTempRequiredLoad); var airOverCoilTemp = await GetPtChartByZip(calculationParameters, false); var requiredLowTempLoadCapacityUserGap = 0; var requiredMedTempLoadCapacityUserGap = 0; var massFlowData = await GetRecommendedCompressorsByMassFlow(calculationParameters); if (massFlowData == null) { return null; } var lowTempCompressorGroup = massFlowData.CompressorResults.Where((l) => l.CompressorType == CompressorType.LowTempCompressor).ToList(); var medTempCompressorGroup = massFlowData.CompressorResults.Where((l) => l.CompressorType == CompressorType.MediumTempCompressor).ToList(); var enthalpyTable = await _nistRepository.GetNistIsothermalEnthalpyTable(35, 185, compressorConfig.MedTempPressure, 25); (double intercept, double slope) = SimpleRegression.Fit(enthalpyTable.x, enthalpyTable.y); foreach (var e in compressorConfig.FlexModels) { var lowTempCompressors = _powerMassFlowUtil.GetFlexModelMassFlow(lowTempCompressorGroup, e.LtComp, int.Parse(ConfigurationManager.AppSetting["Settings:Constants:LowReturnGasTempurature"])); var lowTempCompressorGroupMassFlow = (decimal)lowTempCompressors.Sum((e) => e.MassFlow); var lowTempCompressorGroupPower = _powerMassFlowUtil.GetFlexModelPower(lowTempCompressorGroup, e.LtComp, int.Parse(ConfigurationManager.AppSetting["Settings:Constants:LowReturnGasTempurature"])); var medTempCompressors = _powerMassFlowUtil.GetFlexModelMassFlow(medTempCompressorGroup, e.MtComp, 50); var medTempCompressorGroupMassFlow = (decimal)medTempCompressors.Sum((e) => e.MassFlow); var systemFlashGasMassFLow = _powerMassFlowUtil.GetSystemFlashGasMassFLow(medTempCompressorGroupMassFlow, massFlowData.SystemRequirments.FlashTankInletEnthalpy); var mediumTempMassFlow = medTempCompressorGroupMassFlow - lowTempCompressorGroupMassFlow - systemFlashGasMassFLow; var lowTempExcess = (Math.Round(massFlowData.SystemRequirments.LowTempChangeInEnthalpy * lowTempCompressorGroupMassFlow, 2) - calculationParameters.LowTempRequiredLoad) + requiredLowTempLoadCapacityUserGap; var medTempExcess = (Math.Round(massFlowData.SystemRequirments.MedTempChangeInEnthalpy * mediumTempMassFlow, 2) - calculationParameters.MedTempRequiredLoad) + requiredMedTempLoadCapacityUserGap; flex.Add(new MasterModel { Modelname = e.Modelname, TotalLtCompMassFlow = Math.Round(lowTempCompressorGroupMassFlow, 2), TotalMedCompMassFlow = Math.Round(medTempCompressorGroupMassFlow, 2), LowTempCompressorCapacity = Math.Round(massFlowData.SystemRequirments.LowTempChangeInEnthalpy * lowTempCompressorGroupMassFlow, 2), MedTempCompressorCapacity = Math.Round(massFlowData.SystemRequirments.MedTempChangeInEnthalpy * mediumTempMassFlow, 2), LowTempExcessCapacity = lowTempExcess, LowTempExcessPercent = calculationParameters.LowTempRequiredLoad != 0 ? Math.Round((lowTempExcess / calculationParameters.LowTempRequiredLoad) * 100, 2) : 0, MedTempExcessCapacity = medTempExcess, MedTempExcessPercent = calculationParameters.MedTempRequiredLoad != 0 ? Math.Round((medTempExcess / calculationParameters.MedTempRequiredLoad) * 100, 2) : 0, GasCoolerOutletTemp = (int)airOverCoilTemp.ptChart.GasCoolerOutTemp, GasCoolerOutletPressure = (double)airOverCoilTemp.ptChart.GasCoolerPSIA, AmbientTemp = airOverCoilTemp.ptChart.AmbientTemp, GasCoolerPsiA = airOverCoilTemp.ptChart.GasCoolerPSIA, AirOverCoilTemp = airOverCoilTemp.ptChart.AirOverCoilTemp, CondenserTemp = airOverCoilTemp.ptChart.CondenserTemp, Cooling_DB_04 = airOverCoilTemp.ashrae.Cooling_DB_04, Cooling_MCWB_04 = airOverCoilTemp.ashrae.Cooling_MCWB_04, Extreme_annual_db_Max = airOverCoilTemp.ashrae.Extreme_annual_db_Max, isCriteriaMatched = true, }); } if (calculationParameters.LowTempRequiredLoad == 0 || calculationParameters.MedTempRequiredLoad == 0) { recommendedModels = new FlexModelTotalMassFlow { SystemRequirments = massFlowData.SystemRequirments, FlexModels = flex.Where((f) => f.TotalLtCompMassFlow >= massFlowData.SystemRequirments.LowTempMassFlow && f.TotalMedCompMassFlow >= massFlowData.SystemRequirments.MedTempMassFlow && f.LowTempCompressorCapacity >= calculationParameters.LowTempRequiredLoad && f.MedTempCompressorCapacity >= calculationParameters.MedTempRequiredLoad && f.LowTempExcessPercent < 35 && f.MedTempExcessPercent < 35 ).OrderBy((e) => e.LowTempExcessCapacity).ThenBy((e) => e.MedTempExcessCapacity).ToList() }; } recommendedModels = new FlexModelTotalMassFlow { SystemRequirments = massFlowData.SystemRequirments, FlexModels = flex.Where((f) => f.TotalLtCompMassFlow >= massFlowData.SystemRequirments.LowTempMassFlow && f.TotalMedCompMassFlow >= massFlowData.SystemRequirments.MedTempMassFlow && f.LowTempCompressorCapacity >= calculationParameters.LowTempRequiredLoad && f.MedTempCompressorCapacity >= calculationParameters.MedTempRequiredLoad && f.LowTempExcessPercent < 35 && f.LowTempExcessPercent >= calculationParameters.PercentCapacityGap && f.MedTempExcessPercent < 35 && f.MedTempExcessPercent >= calculationParameters.PercentCapacityGap ).OrderBy((e) => e.LowTempExcessCapacity).ThenBy((e) => e.MedTempExcessCapacity).ToList() }; var requiredMTLoad = calculationParameters.MedTempRequiredLoad; var percentageMTLoad = (requiredMTLoad * 0.35) + requiredMTLoad; var requiredLTLoad = calculationParameters.LowTempRequiredLoad; var percentageLTLoad = (requiredLTLoad * 0.35) +requiredLTLoad; if (recommendedModels.FlexModels.Count <= 0) { recommendedModels = _distanceToUtil.NoCriteriaMatchedModels(flex, massFlowData, requiredMTLoad, percentageMTLoad); } return recommendedModels; } catch (Exception ex) { _logger.LogError(MethodBase.GetCurrentMethod(), ex, calculationParameters); throw; } }
Updated files
v1