private static async Task CreateListener(LoadBalancerClient lbClient, string loadBalancerId, RuleSet ruleSet, string backendSetName)
        {
            logger.Info($"Creating new listener: {ListenerName} with ruleset: {RuleSetName}");

            var ruleSetNames = new List <string>()
            {
                ruleSet.Name
            };
            var createListenerDetails = new CreateListenerDetails
            {
                Name = ListenerName,
                DefaultBackendSetName = backendSetName,
                Port         = ListenerPort,
                Protocol     = ListenerProtocol,
                RuleSetNames = ruleSetNames
            };
            var createListenerRequest = new CreateListenerRequest
            {
                CreateListenerDetails = createListenerDetails,
                LoadBalancerId        = loadBalancerId
            };
            var response = await lbClient.CreateListener(createListenerRequest);

            var waiterConfiguration = new WaiterConfiguration
            {
                MaxAttempts           = 20,
                GetNextDelayInSeconds = DelayStrategy.GetExponentialDelayInSeconds
            };
            var getWorkRequestRequest = new GetWorkRequestRequest
            {
                WorkRequestId = response.OpcWorkRequestId
            };

            lbClient.Waiters.ForWorkRequest(getWorkRequestRequest, waiterConfiguration, WorkRequest.LifecycleStateEnum.Succeeded).Execute();

            logger.Info($"listener {ListenerName} is created");
        }