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

CancellationTokenSource.GetHashCode返回值是否恒定,能否安全存入HashSet

问题结论

CancellationTokenSource.GetHashCode() 方法返回的哈希值在对应实例的整个生命周期内是恒定的,将 CancellationTokenSource 实例存入 HashSet、ImmutableHashSet 这类哈希集合的操作是完全安全的,你给出的示例代码可以正常运行。


具体原理

  • CancellationTokenSource 是引用类型,且.NET官方没有重写它的 GetHashCode() 和 Equals() 方法,使用的是系统为引用类型提供的默认相等性逻辑:按引用判等、哈希码和实例绑定。
  • 默认引用类型的哈希码生成规则为:在实例被GC回收之前,哈希码不会发生任何变化,和实例的内部状态完全无关——哪怕你调用了 Cancel() 方法、或者实例被释放了资源,哈希码也不会改变。
  • 哈希集合的判断逻辑是先通过 GetHashCode() 快速定位槽位,再通过 Equals() 做最终相等性校验,这套逻辑对默认实现的 CancellationTokenSource 完全适用,不会出现找不到元素、重复插入相同实例的问题。

示例代码验证

你给出的代码不会出现哈希码变动导致的异常:

ImmutableHashSet<CancellationTokenSource> TokensSet = new();
TokensSet = TokensSet.Add(myToken);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:06:00