protected override async Task ExecuteAsync(CancellationToken stoppingToken) { if (string.IsNullOrWhiteSpace(_applicationSettings.ParticipantFinishedQueue)) { _logger.LogWarning("No queue url found, aborting listening to messages"); return; } if (string.IsNullOrWhiteSpace(_configuration["PostMark:ApiKey"])) { _logger.LogWarning("No postman apikey aborting listening to messages"); return; } _logger.LogDebug("Listening to messages"); while (!stoppingToken.IsCancellationRequested) { var receiveMessageRequest = new ReceiveMessageRequest(_applicationSettings.ParticipantFinishedQueue) { WaitTimeSeconds = 20 }; var queueResponse = await _sqsService.ReceiveMessageAsync(receiveMessageRequest, stoppingToken); if (!queueResponse.Messages.Any()) { continue; } try { var mailsToSend = queueResponse.Messages.Select(MapToMailMessage); await _postMarkClient.SendEmailsWithTemplateAsync(mailsToSend.ToArray()); await _sqsService.DeleteMessageBatchAsync( _applicationSettings.ParticipantFinishedQueue, queueResponse.Messages .Select(x => new DeleteMessageBatchRequestEntry(x.MessageId, x.ReceiptHandle)).ToList(), stoppingToken); } catch (Exception e) { _logger.LogError($"Failed to process messages {e}"); } } }