RPM*_*984 6 c# cancellationtokensource dotnet-httpclient cancellation-token
我正在尝试将HttpClient调用的默认超时设置为5秒.
我通过这样做了CancellationTokenSource.
这是相关的代码:
var cancellationToken = new CancellationTokenSource();
cancellationToken.CancelAfter(TimeSpan.FromSeconds(5));
var result = _httpClient.SendAsync(request, cancellationToken.Token);
Run Code Online (Sandbox Code Playgroud)
按照调用代码获取"任务被取消"错误(我在.NET 4.7控制台应用程序中测试)的预期工作,但我注意到在Fiddler中请求仍然运行1分钟,直到它最终放弃:
有人可以解释这种行为吗?
我希望在触发取消时基础请求也会被取消.
_httpClient 实例化如下: new HttpClient { BaseAddress = baseAddress }
我知道有Timeout设置,但不确定我是否应该使用它或取消令牌?我的猜测是Timeout针对非异步/等待的情况?
正如达米恩在评论中所说,HttpClient尽可能地重用连接,这就是取消时连接不关闭的原因。
当取消这样的请求时,HttpClient将停止向另一端发送/接收数据。它不会发送任何内容来通知另一端它已被取消。因此,您看到的 1 分钟超时取决于连接另一端的行为。
另外,如果你想在 5 秒后取消每个请求,你也可以设置toTimeout的属性。行为将完全相同(如果另一端在 5 秒内没有响应,则会抛出 a)。_httpClientTimeSpan.FromSeconds(5)TaskCanceledException