private void OnMessage(IAsyncResult ar)
        {
            try
            {
                var receivedMessages = _subscriptionClient.EndReceiveBatch(ar);

                if (_cancelRequested)
                {
                    return;
                }

                foreach (var receivedMessage in receivedMessages)
                {
                    _tryProcessMessage(receivedMessage);
                }
            }
            catch (MessagingEntityDisabledException)
            {
                if (_cancelRequested)
                {
                    return;
                }

                Thread.Sleep(TimeSpan.FromSeconds(BackoffTimeInSeconds));
            }
            catch (ServerBusyException)
            {
                if (_cancelRequested)
                {
                    return;
                }

                Thread.Sleep(TimeSpan.FromSeconds(BackoffTimeInSeconds));
            }

            _subscriptionClient.BeginReceiveBatch(BatchSize, TimeSpan.FromSeconds(ServerWaitTime), OnMessage, null);
        }