public async Task PopulateDomainTopicQueue(DataCleanupParameters parameters) { _log.LogDebug("Queuing domain topics for deletion."); try { string storageConnectionString = Environment.GetEnvironmentVariable("AzureWebJobsStorage") ?? "UseDevelopmentStorage=true"; QueueClient queuePendingDelete = _queueManager.CreateQueueClient(storageConnectionString, QueueNameHoldingDomainTopicsToDelete); await _queueManager.CreateIfNotExistsAsync(queuePendingDelete); EventGridManagementClient eventGridManagementClient = await _eventGridManager.GetEventGridManagementClient( parameters.SubscriptionId, parameters.ServicePrincipalClientId, parameters.ServicePrincipalClientKey, string.Concat(@"https://login.windows.net/", parameters.ServicePrincipalTenantId), @"https://management.azure.com/"); (List <string> domainTopicNames, string nextPageLink) = await _eventGridManager.GetDomainTopics( eventGridManagementClient, parameters.ResourceGroupName, parameters.EventGridName, parameters.DomainTopicNextpage); var queueAddTasks = new List <Task>(); foreach (var domainTopic in domainTopicNames) { parameters.DomainTopicName = domainTopic; string deleteMessage = JsonSerializer.Serialize(parameters); queueAddTasks.Add(_queueManager.SendMessageAsync(queuePendingDelete, deleteMessage)); _log.LogDebug($"Found {domainTopic}"); } _log.LogDebug($"{queueAddTasks.Count} domain topics being added to queue for deletion."); // If there is another page of domain topics, then add a task to the queue to parse it. if (!string.IsNullOrWhiteSpace(nextPageLink)) { QueueClient queuePendingList = _queueManager.CreateQueueClient(storageConnectionString, QueueNameHoldingDomainTopicsToList); await _queueManager.CreateIfNotExistsAsync(queuePendingList); parameters.DomainTopicNextpage = nextPageLink; parameters.DomainTopicName = null; string nextPageParameters = JsonSerializer.Serialize(parameters); queueAddTasks.Add(_queueManager.SendMessageAsync(queuePendingList, nextPageParameters)); _log.LogDebug("Added next domain topic page to queue."); } await Task.WhenAll(queueAddTasks); } catch (Exception ex) { _log.LogError(ex, "Exception encountered in PopulateDomainTopicQueue method."); throw; } _log.LogDebug("Finished processing page of domain topics."); return; }