private static async Task Main(string[] args)
        {
            try
            {
                Console.WriteLine("Hello World!");

                // Step 1: Input
                ElectricityUnitModel electricityUnitModel = new ElectricityUnitModel()
                {
                    Unit = 200
                };

                SurchargeCalculationContext surchargeCalculationContext = new SurchargeCalculationContext();

                // Step 2 : surcharge Calculation
                ElectricitySurchargeModel electricitySurchargeModel = await surchargeCalculationContext.GetSurchargeCalculationAsync(electricityUnitModel);

                // Step 3: Display surchare Calculation
                Console.WriteLine($"Unit : {electricityUnitModel?.Unit}");
                Console.WriteLine($"Surcharge Amount : {electricitySurchargeModel?.SurchargeAmount}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public async Task <ElectricitySurchargeModel> GetSurchargeCalculationAsync(ElectricityUnitModel electricityUnitModel)
        {
            await initializingTask;

            return
                (await
                 (
                     keyValuePairsUnit.FirstOrDefault((keyValuePair) => keyValuePair.Key.Invoke(electricityUnitModel))
                 ).Value.SurchargeCalculationAsync(electricityUnitModel));
        }
 Task <ElectricitySurchargeModel> IUnitSurchargeCalculation.SurchargeCalculationAsync(ElectricityUnitModel electricityUnitModel)
 {
     return(Task.Run(() =>
     {
         return new ElectricitySurchargeModel()
         {
             SurchargeAmount = electricityUnitModel?.Unit * surchargeUnit
         };
     }));
 }