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); }
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); }