示例#1
0
        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}");
        }