【问题标题】:RestSharp TimeoutRestSharp 超时
【发布时间】:2022-01-26 17:01:13
【问题描述】:

我有一个问题,RestClient 响应返回为 “状态码:0,内容类型:,内容长度:)” 带有错误消息 “由于配置的 HttpClient.Timeout 已过 100 秒,请求被取消。”

这是 url 的超时还是我的 httpclient? request.timeout 是否正确?由于最终优化不佳,即使只有 170KB 的数据,此请求也可能需要 5 分钟以上的时间。

var client = new RestClient(url);

            RestRequest request = new RestRequest() { Method = Method.Get };

            request.Timeout = 300000;
            
            request.AddParameter("access_token", AccessToken);
            request.AddParameter("start_date", StartDate.ToString("yyyy-MM-dd"));
            request.AddParameter("end_date", EndDate.ToString("yyyy-MM-dd"));
            request.AddParameter("offset", offset.ToString());

            var response = await client.ExecuteAsync(request);
            var responseWorkLoads = JObject.Parse(response.Content).SelectToken("worklogs");

【问题讨论】:

    标签: timeout restsharp


    【解决方案1】:

    RestSharp 允许您设置两个超时。

    当您创建RestClient 的新实例时,您可以指定HttpClient 超时,该超时将使用RestOptions 覆盖默认的100 毫秒:

    var client = new RestClient(new RestClientOptions { Timeout = 300000 });
    

    由于每个RestClient 实例都会对包装的HttpClient 进行一次实例化和配置,因此设置请求超时不会覆盖该设置,否则客户端将不是线程安全的。

    另一方面,如果请求超时小于,则会覆盖客户端超时。 RestSharp 使用请求超时创建取消令牌源,因此当链接的取消令牌取消时,请求将被取消。

    我相信当前 RestClient 也没有在客户端超时时正确设置失败原因,只有在令牌被取消的情况下。我会为此创建一个问题。

    【讨论】:

    • 感谢您的帮助!我最终使用选项 client.Timeout = TimeSpan.FromMinutes(5); 将其切换到 HttpClient;效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2016-01-30
    • 2015-08-05
    相关资源
    最近更新 更多