public async Task StartAsync(CancellationToken cancellationToken)
        {
            await WrapStarter(() =>
            {
                _connection        = _connectionFactory.Get <CommandNatsAdapter>();
                _responeConnection = _connectionFactory.Get <ResultAdapter>();
            }, cancellationToken);

            var commandQueue = _queueFactory.Get();

            _subscription = _connection.SubscribeAsync(commandQueue.Key, commandQueue.Value, CreateHandler());
        }
        public async Task <Result> SendAsync <TInput>(TInput command) where TInput : IMessage
        {
            return(await Execute(command, async() =>
            {
                var commandQueue = _queueFactory.Get();

                var data = new CommandNatsAdapter(command);
                _connection.Publish(commandQueue.Value, data.Reply, data);
                _connection.Flush();

                return await GetResponse(data.Reply);
            }));
        }