/// <summary>
 ///
 /// </summary>
 private void StopChecker()
 {
     if (_proxyCheckerSvc == null)
     {
         return;
     }
     _proxyCheckerSvc.Shutdown();
     _proxyCheckerSvc.OnIPProxyChecked -= null;
     _proxyCheckerSvc  = null;
     _checkerIsRunning = false;
 }
        /// <summary>
        ///
        /// </summary>
        private void RunChecker()
        {
            if (_proxyCheckerSvc == null)
            {
                _proxyCheckerSvc = new IPProxyChecker(IPCheckWorkerCounts)
                {
                    ProxyBucket = ProxyBucket
                }
            }
            ;

            _proxyCheckerSvc.OnIPProxyChecked += (s, e) =>
            {
                OnIPProxyChecked?.Invoke(this, e);

                // fire ready event
                if (!e.IsValid || ProxyBucket.Count <= 0 || _firedReady)
                {
                    return;
                }

                _firedReady = true;
                OnIPProxyReady?.Invoke(this, new EventArgs());
            };

            _proxyCheckerSvc.OnIPProxiesChecked += (s, e) =>
            {
                OnIPProxiesChecked?.Invoke(this, e);
            };

            Task.Delay(1000)
            .ContinueWith(t =>
            {
                _proxyCheckerSvc.Resume();
                _checkerIsRunning = true;
            });
        }