private EventhubConnection( string eventhubNamespace, string eventHubName, string sharedAccessKeyName, string sharedAccessKey, string consumerGroupName, string listenerName, string listenerVersion, Func <EventMessage, Task> onMessage, Func <Exception, Task> onError = null) { ListenerName = listenerName; ListenerVersion = listenerVersion; var endpoint = string.Format(EventhubUriTemplate, eventhubNamespace); var receiverConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, $"{eventHubName}/ConsumerGroups/{consumerGroupName}/Partitions/1", sharedAccessKeyName, sharedAccessKey); var receiver = new MessageReceiver(receiverConnectionStringBuilder, ReceiveMode.ReceiveAndDelete); receiver.RegisterMessageHandler(async(message, cancellationToken) => { try { var eventMessage = EventMessage.Convert(message); switch (eventMessage.EventName) { case EventNames.STATUS_REQUEST: await SendStatusMessage(); break; } await onMessage(eventMessage); } catch (InvalidEventConversion e) { if (onError != null) { await onError(e); } } }, new MessageHandlerOptions((exceptions) => { Console.WriteLine($"Error received: {exceptions.Exception.Message}"); return(Task.FromResult <object>(null)); })); var senderConnectionStringBuilder = new ServiceBusConnectionStringBuilder(endpoint, $"{eventHubName}/Partitions/1", sharedAccessKeyName, sharedAccessKey); eventhubSender = new MessageSender(senderConnectionStringBuilder); SendOnlineMessage().GetAwaiter().GetResult(); }