从ThreadLocal <t>清除值的最佳方法

时间:2015-05-07 09:32:36

标签: c# .net

我正在使用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

3 个答案:

答案 0 :(得分:4)

您无法为单个线程取消初始化数据。没有方法可以做到这一点(除了重新创建ThreadLocal<>,丢失所有值)

分配后,该IsValueCreated的值为truenull是一个非常好的价值,它并不代表&#34;取消分配价值&#34;或&#34;未分配值&#34;。

答案 1 :(得分:0)

您应该处置ThreadLocal<string>的实例并删除对它的所有引用,如果您已完成它并创建一个新的。

属性Value已初始化为懒惰。因此,当您第一次访问该属性时,将创建该值并将属性IsValueCreated设置为true。

答案 2 :(得分:0)

“...... IsValueCreated属性仍然显示为true。” - 它是。 您为当前线程设置了“Value = null”,但线程仍处于活动状态。