async Task <TResponse> ExecAsync <TResponse>(AsyncUnaryCall <TResponse> auc, Func <AsyncUnaryCall <TResponse> > fn)
        {
            var(response, status, headers) = await GrpcUtils.GetResponseAsync(Config, auc);

            if (status?.ErrorCode != null)
            {
                var callInvoker = Config.Channel.CreateCallInvoker();
                if (await client.RetryRequest(Config, auc.GetStatus().StatusCode, status, callInvoker))
                {
                    using var retryAuc = fn();
                    var(retryResponse, retryStatus, retryHeaders) = await GrpcUtils.GetResponseAsync(Config, retryAuc);

                    if (retryStatus?.ErrorCode == null)
                    {
                        return(retryResponse);
                    }
                }

                throw new WebServiceException(status.Message)
                      {
                          StatusCode  = ResponseCallContext.GetHttpStatus(headers),
                          ResponseDto = response as object ?? new ServiceStack.EmptyResponse {
                              ResponseStatus = status
                          },
                          ResponseHeaders = GrpcUtils.ResolveHeaders(headers),
                          State           = auc.GetStatus(),
                      };
            }
            return(response);
        }
        ClientInterceptorContext <TRequest, TResponse> CreateContext <TRequest, TResponse>(
            TRequest requestDto, ClientInterceptorContext <TRequest, TResponse> context) where TRequest : class where TResponse : class
        {
            var authIncluded = GrpcUtils.InitRequestDto(Config, requestDto);
            var options      = context.Options.Init(Config, noAuth: authIncluded);

            return(new ClientInterceptorContext <TRequest, TResponse>(context.Method, context.Host, options));
        }