/// <summary>
        /// Sends the data
        /// </summary>
        /// <param name="worker">sender</param>
        /// <param name="settings">sender settings</param>
        private async void Send(ISendWorker worker, IExchangeSettings settings)
        {
            do
            {
                if (!settings.SilentCancel)
                {
                    _cancellationToken.ThrowIfCancellationRequested();
                }

                worker.RefreshSendCollection(settings);
                var lastDateUpdated = DateTime.Now;
                if (!worker.IsSendQueueEmpty)
                {
                    var tasks = new List <Task>();
                    for (var i = 0; i < settings.CountThreads; i++)
                    {
                        tasks.Add(SendAction(worker));
                    }

                    while (tasks.Count > 0)
                    {
                        var finishedTask = await Task.WhenAny(tasks);

                        tasks.Remove(finishedTask);
                    }
                }
                else
                {
                    var timeOut = (int)(DateTime.Now - lastDateUpdated).TotalMilliseconds;
                    if (timeOut < settings.Timeout)
                    {
                        Thread.Sleep(settings.Timeout - timeOut);
                    }
                }
            } while (!settings.StopServiceAfterFirstRun);
        }
 /// <summary>
 /// Получает задачу отправки
 /// </summary>
 /// <param name="worker">Отправитель</param>
 /// <returns>Задача отправки</returns>
 private async Task SendAction(ISendWorker worker)
 {
     await Task.Run(() => worker.Send(), _cancellationToken);
 }