예제 #1
0
        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);
        }
예제 #2
0
        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;
        }