您可以使用System.Threading.Thread.CurrentThread作为字典中的键吗?



我目前正在尝试实现一个简约的ThreadLocal类。我知道这是在 DotNet 4 中实现的,但我处于无法升级的情况。

我的想法是使用一个非常简单的类,该类保存一个弱哈希表,并且仅存储基于当前线程的对象作为键。(我们有一个弱哈希表的自定义实现)

您认为这是一种可行的方法还是需要考虑任何线程问题?是否可以使用当前线程作为键、内存问题等?

public class SimpleThreadLocal<T>
{
    private readonly WeakHashtable _threadToValue;
    public SimpleThreadLocal()
    {
        _threadToValue = new WeakHashtable();
    }
    public void Set(T value)
    {
        lock (this)
        {
            _threadToValue[Thread.CurrentThread] = value;
        }
    }
    public T Get()
    {
        lock (this)
        {
            return (T) _threadToValue[Thread.CurrentThread];
        }
    }
}

为什么不使用LogicalCallContext?它不仅像TLS一样工作,而且实际上更智能,并将您的"TLS"插槽值保留在异步回调等中。请参阅逻辑调用上下文:跨线程、应用程序域和进程流动数据以及执行上下文与同步上下文。

相关内容

  • 没有找到相关文章

最新更新