RestSharp 超时

RestSharp Timeout

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

这是 url 端或我的 httpclient 的超时吗? request.timeout 正确吗?这个请求可能需要 5 分钟以上的时间,即使它只有 170KB 的数据,因为它们的末端优化不佳。

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");

RestSharp 允许您设置两个超时。

当您创建 RestClient 的新实例时,您可以使用 RestOptions:

指定将覆盖默认 100 毫秒的 HttpClient 超时
var client = new RestClient(new RestClientOptions { Timeout = 300000 });

由于包装的 HttpClient 每个 RestClient 实例实例化和配置一次,设置请求超时不会覆盖该设置,否则客户端将不会 thread-safe。

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

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