public void Handle(
     Message <TPayloadType, TBody> msg,
     IBodyEncoder <TBody> encoder,
     IMessageResultMonad <TPayloadType, TBody> messageResultMonad)
 {
     task.SetResult(messageResultMonad.To <T>(msg));
 }
 public NetMqClient(
     IBodyEncoder <TBody> encoder,
     IMessageResultMonad <TPayloadType, TBody> messageResultMonad,
     IOutgoingConnection <TPayloadType, TBody> outgoingConnection,
     IConnectionIdGenerator connectionIdGenerator)
 {
     this.encoder            = encoder;
     this.messageResultMonad = messageResultMonad;
     this.outgoingConnection = outgoingConnection;
     this.connectionId       = connectionIdGenerator.Generate();
 }