Example #1
0
        public static async Task Scheduler(
            [TimerTrigger("0 */1 * * * *")] TimerInfo timer, // every minutes
            [Table(TableNames.CommSchedule)] CloudTable scheduleTable,
            [Inject] IQueueRepository queueRepository,
            ILogger log)
        {
            var rowRange = timer.ResolveRowRange();

            // 1. Get the first segment of the scheduled messages.
            var exec = await scheduleTable.GetFirstSegmentOf <MessageSchedule>(CommSchedulePartitionKeys.Scheduled, rowRange);

            if (exec.Results.Count == 0)
            {
                return;
            }

            var schedules = exec.Results;

            // TODO: can do additional schedule filter here if it is required
            // var delayed = await schedules.MoveTo(scheduleTable
            //         , s => CommSchedulePartitionKeys.Scheduled
            //         , s => idGenerator.ScheduleId(timestamp, "!")
            //     );
            //
            // return;

            // 2. mark they as in progress
            var results = await schedules.MoveTo(scheduleTable, schedule => CommSchedulePartitionKeys.InProgress);

            // 3. push to send queue
            await results.DispatchTo(queueRepository);
        }
Example #2
0
        public static async Task Dispatcher(
            [TimerTrigger("0 */1 * * * *")] TimerInfo timer, // every minutes
            [Table(TableNames.CommSchedule)] CloudTable scheduleTable,
            [Inject] IQueueRepository queueRepository,
            ILogger log)
        {
            var rowRange = timer.ResolveRowRange();

            // 1. Get the first segment of the scheduled messages.
            var exec = await scheduleTable.GetFirstSegmentOf <MessageSchedule>(CommSchedulePartitionKeys.InProgress, rowRange);

            if (exec.Results.Count == 0)
            {
                return;
            }

            await exec.Results.DispatchTo(queueRepository);
        }