private async Task processAsync(EmailMessage emailMessage)
        {
            logger.LogDebug($"Start processing email message {emailMessage.Id}");
            Interlocked.Increment(ref consumerTasksPending);
            try {
                await processor.ProcessAsync(emailMessage);

                logger.LogDebug($"Successfully processed email message {emailMessage.Id}");
            } catch (SingleProcessingException e) {
                logger.LogError(e, $"Delivery error for message {emailMessage.Id}");
                throw e;
            } catch (GeneralProcessingException e) {
                logger.LogError(e, $"General delivery problem for message {emailMessage.Id}");
                await messageSource.RetryAsync(emailMessage);
            } catch (Exception e) {
                logger.LogError(e, $"Unexpected Exception while processing message {emailMessage.Id}");
                throw e;
            } finally {
                Interlocked.Decrement(ref consumerTasksPending);
            }
        }