다음을 통해 공유


CA2019: ThreadStatic 필드는 인라인 초기화를 사용하면 안 됩니다.

속성
규칙 ID CA2019
타이틀 ThreadStatic 필드는 인라인 초기화를 사용하면 안 됩니다.
범주 신뢰성
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 제안 사항

원인

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

경고를 표시하지 않는 경우

이 규칙의 경고를 표시하지 않는 것이 안전하지만 앱에 예기치 않은 동작을 나타낼 수 있습니다.

추가 정보