public async Task Run([TimerTrigger("0 1 * * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context, [Queue(GlobalConstants.GenerateVacancyAnalyticsQueueName), StorageAccount("QueueStorage")] IAsyncCollector <string> vacancyReferenceStorageQueue) { log.LogInformation($"C# Timer trigger {nameof(EnqueueVacancyAnalyticsSummaryGenerator)} function executed at: {DateTime.UtcNow}"); var reader = new VacancyEventStoreReader(_config.GetConnectionString(VacancyEventStoreConnStringKey), log, _hostingEnvironment); var vacancyRefs = (await reader.GetRecentlyAffectedVacanciesAsync(lastNoOfHours: 1)).ToList(); var enqueueTasks = new List <Task>(); var sendCounter = 0; foreach (var vacancyRef in vacancyRefs) { enqueueTasks.Add(vacancyReferenceStorageQueue.AddAsync(JsonConvert.SerializeObject(new { VacancyReference = vacancyRef }))); sendCounter++; if (sendCounter % 1000 == 0) { await Task.WhenAll(enqueueTasks); log.LogInformation($"Queued {sendCounter} of {vacancyRefs.Count} messages."); enqueueTasks.Clear(); await Task.Delay(250); } } // await final tasks not % 1000 await Task.WhenAll(enqueueTasks); log.LogInformation($"Finished C# Timer trigger {nameof(EnqueueVacancyAnalyticsSummaryGenerator)} function completed at: {DateTime.UtcNow}"); }
public async Task Run([TimerTrigger("0 1 * * * *")] TimerInfo myTimer, ILogger log, ExecutionContext context) { log.LogInformation($"C# Timer trigger {nameof(EnqueueVacancyAnalyticsSummaryGenerator)} function executed at: {DateTime.UtcNow}"); var reader = new VacancyEventStoreReader(_config.GetConnectionString(VacancyEventStoreConnStringKey), log); var queue = new VacancyAnalyticsQueueStorageWriter(_config.GetConnectionString(QueueStorageConnStringKey)); var vacancyRefs = await reader.GetRecentlyAffectedVacanciesAsync(lastNoOfHours : 1); await Task.WhenAll(vacancyRefs.Select(vr => queue.QueueVacancyAsync(vr))); log.LogInformation($"Finished C# Timer trigger {nameof(EnqueueVacancyAnalyticsSummaryGenerator)} function completed at: {DateTime.UtcNow}"); }