protected override void AbortClient(GrpcCommunicationClient <TClient> client)
        {
            var channel = client.ChannelEntry.Channel;

            Log.LogDebug("Abort client {Id} for: {Target}, {Resolved}, {State}",
                         client.Id, channel.Target, channel.ResolvedTarget, channel.State);
            client.ChannelEntry.ShutdownAsync().Wait();
        }
        protected override Task <GrpcCommunicationClient <TClient> > CreateClientAsync(string endpoint, CancellationToken cancellationToken)
        {
            Log.LogTrace("Create client for {Endpoint}", endpoint);
            var channelEntry        = _channelCache.GetOrCreate(endpoint);
            var client              = _creator(channelEntry.Channel);
            var communicationClient = new GrpcCommunicationClient <TClient>(endpoint, channelEntry, client);

            Log.LogTrace("Created client {Id} for {Endpoint}", communicationClient.Id, endpoint);
            return(Task.FromResult(communicationClient));
        }
 protected override bool ValidateClient(string endpoint, GrpcCommunicationClient <TClient> client) =>
 endpoint == client.ConnectionAddress && ValidateClient(client);
 protected override bool ValidateClient(GrpcCommunicationClient <TClient> client) =>
 client.ChannelEntry.Validate(Log);