CA2019:ThreadStatic 字段不应使用内联初始化

属性
规则 ID CA2019
标题 ThreadStatic 字段不应使用内联初始化
类别 可靠性
修复是中断修复还是非中断修复 非中断
在 .NET 10 中默认启用 作为建议

原因

使用 ThreadStaticAttribute 注释的字段会以内联方式初始化,或在 static(Visual Basic 中的 Shared)构造函数中显式初始化。

规则说明

ThreadStaticAttribute 字段应在使用时延迟初始化,而不是通过内联初始化或在 static(Visual Basic 中的 Shared)构造函数中显式初始化。 static 构造函数仅初始化运行类型 static 构造函数的线程上的字段。

如何解决冲突

要解决冲突,请移除内联或 static 构造函数初始化。 相反,请在首次使用时初始化该字段。

示例

以下代码片段演示了 CA2019 冲突:

class C
{
    [ThreadStatic]
    private static Object obj = new();
}
Class C
    <ThreadStatic>
    Private Shared obj As New Object()
End Class

以下代码片段演示如何解决冲突:

class C
{
    [ThreadStatic]
    private static Object obj;

    static void S1()
    {
        obj ??= new Object();
    }
}
Class C
    <ThreadStatic>
    Private Shared obj

    Shared Sub S1()
        If obj Is Nothing Then
            obj = New Object()
        End If
    End Sub
End Class

何时禁止显示警告

可以安全地禁止显示来自此规则的警告,但应用可能会表现出意外行为。

另请参阅