public async static Task <AdvancedAsyncMessageProcessingWorker <T> > CreateAndStartAsync(IQueueConsumer consumer,
                                                                                                 Func <T, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                                                                                 CancellationToken cancellationToken,
                                                                                                 ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                                                                                 int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0)
        {
            var instance = new AdvancedAsyncMessageProcessingWorker <T>(consumer, callbackFunc, processingTimeout,
                                                                        exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds);

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

            return(instance);
        }
        public async static Task <AdvancedAsyncMessageProcessingWorker <T> > CreateAndStartAsync(IQueueClient queueClient,
                                                                                                 string queueName, Func <T, CancellationToken, Task> callbackFunc, TimeSpan processingTimeout,
                                                                                                 CancellationToken cancellationToken,
                                                                                                 ExceptionHandlingStrategy exceptionHandlingStrategy = ExceptionHandlingStrategy.Requeue,
                                                                                                 int invokeRetryCount = 1, int invokeRetryWaitMilliseconds = 0,
                                                                                                 ConsumerCountManager consumerCountManager = null, IMessageRejectionHandler messageRejectionHandler = null)
        {
            var instance = new AdvancedAsyncMessageProcessingWorker <T>(queueClient, queueName, callbackFunc,
                                                                        processingTimeout, exceptionHandlingStrategy, invokeRetryCount, invokeRetryWaitMilliseconds,
                                                                        consumerCountManager, messageRejectionHandler);

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

            return(instance);
        }