/// <summary>
        /// Метод, выполняющий запуск потоков отправки для каждой подписки.
        /// </summary>
        private void SendMsgsByCallBack()
        {
            try
            {
                // Ищем актуальные подписки, для которых есть сообщения.
                IEnumerable <Subscription> callbackSubscriptions = _subscriptionsManager.GetCallbackSubscriptions().Where(x => GetCurrentMessageCount(x.Client.ID, x.MessageType.ID) > 0);
                try
                {
                    foreach (var subscription in callbackSubscriptions)
                    {
                        SubscriberThreadPool.QueueUserWorkItem(subscription, _scanninWaitEvent, _statistics, _dataService, _logger);
                    }

                    SubscriberThreadPool.CheckForUnActiveSubscribers();
                }
                catch (Exception e)
                {
                    _logger.LogUnhandledException(e, null, "Ошибка при порождении потоков подписчиков через QueueUserWorkItem.");
                }
            }
            catch (Exception e)
            {
                _logger.LogUnhandledException(e, null, "Ошибка при получении активных подписок, отправляемых по Callback.");
            }
        }
        /// <summary>
        /// Поток сканирующий БД на наличие подписок.
        /// </summary>
        private void ScanMessages()
        {
            try
            {
                // Notify main thread that scanning thread has started.
                _scanningStartedEvent.Set();

                while (true)
                {
                    if (_requestStopScanning)
                    {
                        SubscriberThreadPool.ReleaseAllSubscriptionThreads();
                        return;
                    }

                    try
                    {
                        SendMsgsByCallBack();
                    }
                    catch (Exception ex)
                    {
                        _logger.LogUnhandledException(ex);
                    }

                    _scanninWaitEvent.WaitOne(ScanningPeriodMilliseconds);
                }
            }
            catch (Exception e)
            {
                _logger.LogUnhandledException(e);
            }
            finally
            {
                // Notify main thread that scanning thread has stopped.
                _scanningStoppedEvent.Set();
            }
        }