コードインスペクション: スレッド静的フィールドにイニシャライザーがあります
ThreadStaticAttribute は、フィールドをスレッドローカルにします。 これは、すべてのスレッドがフィールドに対応する独自の参照を持つことを意味します。 ThreadStaticAttribute でマークされたフィールドは静的で、静的に初期化されていない必要があります。
この属性はインスタンスフィールドには影響しません。 スレッドローカルインスタンスフィールドが必要な場合は、.NET 4.0 で導入された ThreadLocal<> タイプを使用できます。
静的フィールドに初期化子がある場合、この初期化子は静的コンストラクターを実行するスレッドで 1 回のみ呼び出されます。 すべてのスレッドで初期化が必要な場合、このフィールドは遅延初期化プロパティでカプセル化できます。
[ThreadStatic]
private static object myFoo;
public static object Foo
{
get
{
if (myFoo == null)
myFoo = new object();
return myFoo;
}
}
<ThreadStatic>
Private Shared Dim myFoo As Object
Public Shared ReadOnly Property Foo As Object
Get
If (myFoo Is Nothing) Then myFoo = New Object()
Return myFoo
End Get
End Property
代わりに、 ThreadLocal<> クラスを使用することもできます(.NET 4.0 以降)。
private ThreadLocal<object> myFoo = new ThreadLocal<object>(() => new object());
Dim myFoo As ThreadLocal(Of Object) = new ThreadLocal(Of Object)(Function() New Object())
2026 年 6 月 12 日