/// <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); }