/// <summary>
        ///
        /// </summary>
        /// <param name="descriptor"></param>
        /// <param name="token"></param>
        /// <returns></returns>
        public async Task <ResponseWrapper> SendAndWrapAsync(RequestDescriptor descriptor, CancellationToken token = default)
        {
            var requestBuilder = _builderFactory.GetBuilder(descriptor.HttpOption.RequestBuilderType);
            var request        = requestBuilder.GetRequest(descriptor);

            var result = _cacheOperator.Read(request);

            if (!result.HasHitCache)
            {
                var argument = new RetryPolicyArgument
                {
                    Service           = descriptor.ServiceName,
                    Module            = descriptor.ModuleName,
                    Option            = descriptor.HttpOption.RetryOption,
                    Request           = request,
                    IsSuccessResponse = descriptor.HttpOption.IsSuccessResponse,
                    Sending           = async message =>
                    {
                        var client          = _clientFactory.CreateClient(descriptor.ServiceName);
                        var responseMessage = await client.SendAsync(message, token);

                        return(new HttpResponse(responseMessage));
                    }
                };
                result = await _retryProcessor.ProcessAsync(argument);

                //调用日志记录器,写缓存(如果符合条件)
                _cacheOperator.Write(result.Response, descriptor.HttpOption.CacheOption);
            }
            try
            {
                //保存请求信息,请求结果
                await _recordStore.WriteAsync(descriptor, result);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"日志记录器{_recordStore.GetType().Name},写入日志时出错:{ex.Message}");
            }

            if (result.Exception != null)
            {
                throw result.Exception;
            }
            return(result);
        }