JetBrains Rider 2024.1 ヘルプ

コード検査: スレッド静的フィールドに初期化子があります

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())