我正在使用ThreadLocal<T>
来存储每个线程的项目,但是每经常使用一次,我希望清除一个线程的存储值。这样做的最佳方式是怎样的?我可以将实例的值重置为null,但IsValueCreated属性仍显示为true。
e.g。
var storage = new ThreadLocal<string>();
storage.Value = "hello";
//storage.IsValueCreated -> true
storage.Value = null;
//storage.IsValueCreated -> still true
答案 0 :(得分:4)
您无法为单个线程取消初始化数据。没有方法可以做到这一点(除了重新创建ThreadLocal<>
,丢失所有值)
分配后,该IsValueCreated
的值为true
。 null
是一个非常好的价值,它并不代表&#34;取消分配价值&#34;或&#34;未分配值&#34;。
答案 1 :(得分:0)
您应该处置 ThreadLocal<string>
的实例并删除对它的所有引用,如果您已完成它并创建一个新的。
属性Value
已初始化为懒惰。因此,当您第一次访问该属性时,将创建该值并将属性IsValueCreated
设置为true。
答案 2 :(得分:0)
“...... IsValueCreated属性仍然显示为true。” - 它是。 您为当前线程设置了“Value = null”,但线程仍处于活动状态。