You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无取消时限的CancellationTokenSource绑定HTTP请求是否永不过期?

关于CancellationTokenSource与HTTP请求过期的问题

背景说明

System.Threading.CancellationTokenSource支持两种实例化方式,对应的构造函数如下:

public CancellationTokenSource();
public CancellationTokenSource(int millisecondsDelay);

将其绑定到HTTP请求的示例代码:

await httpClient.SendRequestAsync(request).AsTask(CreateCancellationTokenSource().Token);

已知带取消周期的CancellationTokenSource会在时限到达后自动取消请求,现需明确:若使用不带取消周期的构造函数实例化,当响应迟迟未返回时,请求是否永远不会过期?

回答

是的,这种情况下请求不会自动过期。

不带取消周期的CancellationTokenSource不会主动触发取消操作,只有在以下几种场景下才会取消绑定的请求:

  • 手动调用该CancellationTokenSource的Cancel()或CancelAfter()方法;
  • 该CancellationTokenSource对象被垃圾回收(但依赖垃圾回收触发取消不可靠,不建议依赖此方式)。

如果HTTP请求绑定了这种无自动取消逻辑的CancellationToken,只要服务器一直不返回响应、客户端网络未断开、进程未终止,请求就会一直处于挂起状态,持续占用客户端的网络资源和线程资源。

实际开发中不建议这么使用,最好通过以下方式避免请求无限挂起:

  • 使用带超时参数的CancellationTokenSource构造函数;
  • 手动在合适的业务时机调用Cancel()方法;
  • 配置HttpClient自身的Timeout属性(这是更推荐的HTTP请求超时控制方式,它针对整个请求生命周期做超时限制)。

内容的提问来源于stack exchange,提问作者SurenSaluka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 17:42:48