internal async Task <MetadataResponse> MetadataRequest(TopicRequest request, BrokerMeta broker = null, bool noTransportErrors = false) { TcpClient tcp; Connection conn; if (broker != null) { conn = broker.Conn; tcp = await conn.GetClientAsync(noTransportErrors); } else { var clientAndConnection = await _cluster.GetAnyClientAsync(); conn = clientAndConnection.Item1; tcp = clientAndConnection.Item2; } //var tcp = await (broker != null ? broker.Conn.GetClientAsync() : _cluster.GetAnyClientAsync()); _log.Debug("Sending MetadataRequest to {0}", tcp.Client.RemoteEndPoint); if (_etw.IsEnabled()) { _etw.ProtocolMetadataRequest(request.ToString()); } var response = await conn.Correlation.SendAndCorrelateAsync( id => Serializer.Serialize(request, id), Serializer.DeserializeMetadataResponse, tcp, CancellationToken.None); if (_etw.IsEnabled()) { _etw.ProtocolMetadataResponse(response.ToString(), broker != null ? broker.Host : "", broker != null ? broker.Port : -1, broker != null ? broker.NodeId : -1); } return(response); }