代码检查:[ThreadStatic] 不适用于实例字段
ThreadStaticAttribute 使字段成为线程本地的。 这意味着每个线程都有其对应于该字段的引用。 标记为 ThreadStaticAttribute 的字段必须是静态的,并且不能静态初始化。
此属性不会影响实例字段。 如果您需要线程本地的实例字段,可以使用在 .NET 4.0 中引入的 ThreadLocal<> 类型。
如果静态字段具有初始化器,则此初始化器仅在执行静态构造函数的线程上调用一次。 如果需要在所有线程上进行初始化,则可以通过延迟初始化的属性封装该字段:
[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())
最后修改日期: 2025年 9月 27日