public async Task<AsyncClosable> StartAsync(
            EndpointConfiguration.ReadOnly configuration, 
            Func<TransportMessage, Task> onMessage)
        {
            MessageReceiver client =
                await this.factory
                    .CreateMessageReceiverAsync(configuration.DestinationQueue(), ReceiveMode.PeekLock)
                    .ConfigureAwait(false);

            OnMessageOptions options = configuration.Options();
            options.ExceptionReceived += (sender, args) => HandleExceptionReceived(configuration.DestinationQueue(), args);

            configuration.Configure(client).OnMessageAsync(brokeredMessage => onMessage(new TransportMessage(brokeredMessage)), options);

            return new AsyncClosable(client.CloseAsync);
        }