private void SendNextSdkClickI()
        {
            if (_isPaused)
            {
                return;
            }
            if (_packageQueue.Count == 0)
            {
                return;
            }

            var sdkClickPackage = _packageQueue.Dequeue();
            int retries         = sdkClickPackage.Retries;

            Action action = () =>
            {
                _requestHandler.SendPackageSync(sdkClickPackage, _packageQueue.Count - 1);
                SendNextSdkClick();
            };

            if (retries <= 0)
            {
                action.Invoke();
                return;
            }

            var waitTime = Util.WaitingTime(retries, _backoffStrategy);

            _logger.Verbose("Waiting for {0} seconds before retrying sdk_click for the {1} time", Util.SecondDisplayFormat(waitTime), retries);

            _actionQueue.Delay(waitTime, action);
        }
        public void CloseFirstPackage(ResponseData responseData, ActivityPackage activityPackage)
        {
            _activityHandler.FinishedTrackingActivity(responseData);

            Action action = () =>
            {
                _logger.Verbose("Package handler can send");
                _internalWaitHandle.Set(); // open the door (signals the wait handle)

                SendFirstPackage();
            };

            int retries = activityPackage.IncreaseRetries();

            var waitTime = Util.WaitingTime(retries, _backoffStrategy);

            _logger.Verbose("Waiting for {0} seconds before retrying for the {1} time", Util.SecondDisplayFormat(waitTime), retries);

            _actionQueue.Delay(waitTime, action);
        }