【问题标题】:RestSharp.RestClient ignores timeoutRestSharp.RestClient 忽略超时
【发布时间】:2017-05-22 09:54:04
【问题描述】:

我正在使用 RestSharp.RestClient (105.2.4-rc4-24214-01) 开发一个 .net 核心应用程序。 我设置了

RestClient.Timeout=1 

RestClient.Timeout=10000

然后调用我的测试 API

var tcs = new TaskCompletionSource<IRestResponse>();
RestClient.ExecuteAsync(request, response => { tcs.SetResult(response); })
return tcs.Task.Result;

但它仍然使用默认值 100000 并生成“任务已取消”。仅在 100000 毫秒后出现异常。

如何更改此值?

【问题讨论】:

  • 您是否设置了用于发送请求的特定 RestClient 实例的超时时间?
  • 是的,我确定我是
  • 同样的问题,我设置了 Timeout 和 ReadWriteTimeout 但它不起作用。
  • 同样的问题...叹息...
  • 这个测试通过了github.com/restsharp/RestSharp/blob/develop/…你有什么不同的地方吗?

标签: .net asp.net-core timeout restsharp


【解决方案1】:

文档说 Request.Timeout 会覆盖 RestClient.Timeout。 试试这个:

var tcs = new TaskCompletionSource<IRestResponse>();
request.Timeout = 10000;
RestClient.ExecuteAsync(request, response => { tcs.SetResult(response); })
return tcs.Task.Result;

【讨论】:

    【解决方案2】:

    您可以使用 CancellationTokenSource 并使用其令牌来中止响应句柄。 请尝试以下代码设置 10 秒超时

    System.Threading.CancellationTokenSource cts = new  System.Threading.CancellationTokenSource ();
     cts.CancelAfter (TimeSpan.FromMilliseconds(10000));
    var tcs = new TaskCompletionSource<IRestResponse>();
     RestRequestAsyncHandle handle = RestClient.ExecuteAsync(request, response => { tcs.SetResult(response); })
     using (cts.Token.Register(() => handle.Abort()))
            {
            return (RestResponse)(await tcs.Task);
            }
    

    希望对你有帮助!!

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-03
      • 2011-01-18
      • 2023-03-18
      • 2012-03-12
      相关资源
      最近更新 更多