public async Task <ProducerResponse> Send(CommandProducer command, IChannel channel) { Task <ProducerResponse>?responseTask = null; using (await _lock.Lock()) { var baseCommand = command.AsBaseCommand(); var requestResponseTask = _requestResponseHandler.Outgoing(baseCommand); responseTask = _channelManager.Outgoing(command, requestResponseTask, channel); var sequence = Serializer.Serialize(baseCommand); await _stream.Send(sequence); } return(await responseTask); }
public async Task <ProducerResponse> Send(CommandProducer command, IChannel channel, CancellationToken cancellationToken) { ThrowIfDisposed(); Task <ProducerResponse>?responseTask; using (await _lock.Lock(cancellationToken).ConfigureAwait(false)) { var baseCommand = command.AsBaseCommand(); var requestResponseTask = _requestResponseHandler.Outgoing(baseCommand); responseTask = _channelManager.Outgoing(command, requestResponseTask, channel); var sequence = Serializer.Serialize(baseCommand); await _stream.Send(sequence).ConfigureAwait(false); } return(await responseTask.ConfigureAwait(false)); }