public static async Task <SimpleProcessingWorker <T> > CreateAndStartAsync(IQueueConsumer consumer,
                                                                                   Action <IEnumerable <T> > batchCallbackAction, ushort batchSize, CancellationToken cancellationToken, ILogger logger = null)
        {
            var instance = new SimpleProcessingWorker <T>(consumer, batchCallbackAction, batchSize, logger);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
        public static async Task <SimpleProcessingWorker <T> > CreateAndStartAsync(IQueueConsumer consumer,
                                                                                   Action <T, RabbitMQConsumerContext> callbackAction, CancellationToken cancellationToken, ILogger logger = null)
        {
            var instance = new SimpleProcessingWorker <T>(consumer, callbackAction, logger);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }
        public static async Task <SimpleProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                   string queueName,
                                                                                   Action <IEnumerable <T> > batchCallbackAction, ushort batchSize, CancellationToken cancellationToken,
                                                                                   IConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null,
                                                                                   ILogger logger = null, ushort prefetchCount = 1)
        {
            var instance = new SimpleProcessingWorker <T>(queueClient, queueName, batchCallbackAction, batchSize,
                                                          consumerCountManager, messageRejectionHandler, logger, prefetchCount);

            await instance.StartAsync(cancellationToken).ConfigureAwait(false);

            return(instance);
        }