0

我目前正在尝试实现一个简约的 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];
        }
    }
}
4

1 回答 1

1

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

于 2012-06-21T10:39:59.843 回答