현재 최소의 ThreadLocal 클래스를 구현하려고합니다. 이것이 DotNet 4에서 구현된다는 것을 알고 있지만 업그레이드가 불가능한 상황에 처해 있습니다.System.Threading.Thread.CurrentThread를 사전의 키로 사용할 수 있습니까
제 아이디어는 약한 해시 테이블을 보유하고 현재 스레드를 기반으로하는 객체를 키로 저장하는 아주 간단한 클래스를 사용하는 것입니다. (약한 해시 테이블의 커스텀 구현이있다)
실용적인 접근이라고 생각합니까? 또는 고려해야 할 스레딩 문제가 있습니까? 키, 메모리 문제 등으로 현재 스레드를 사용하는 것이 좋습니까?
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];
}
}
}