public Task SubscribeAsync(ScheduleSuccessCallback <T> onSuccess, ScheduleErrorCallback <T> onError, CancellationToken ct = default) { consumer = new TimerConsumer <T>(schedulerStore, schedulerOptions, onSuccess, onError, log, clock); consumer.Subscribe(); return(Task.CompletedTask); }
public TimerConsumer(ISchedulerStore <T> schedulerStore, SchedulerOptions schedulerOptions, ScheduleSuccessCallback <T> onSuccess, ScheduleErrorCallback <T> onError, ILogger log, IClock clock) { this.schedulerStore = schedulerStore; this.schedulerOptions = schedulerOptions; this.onSuccess = onSuccess; this.onError = onError; activity = $"Scheduler.Query({schedulerOptions.QueueName})"; actionBlock = new ActionBlock <SchedulerBatch <T> >(async batch => { using (Telemetry.Activities.StartActivity(activity)) { try { await HandleAsync(batch); } catch (OperationCanceledException ex) { throw new AggregateException(ex); } } }, new ExecutionDataflowBlockOptions { BoundedCapacity = schedulerOptions.MaxParallelism * 4, MaxDegreeOfParallelism = schedulerOptions.MaxParallelism, MaxMessagesPerTask = 1 }); this.clock = clock; this.log = log; }