現在、最小限の 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];
}
}
}