CA2019:
| 속성 | 값 |
|---|---|
| 규칙 ID | CA2019 |
| 제목 |
ThreadStatic 필드는 인라인 초기화를 사용하면 안 됩니다. |
| 범주 | 신뢰성 |
| 수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 | 주요 변경 아님 |
| .NET 10에서 기본적으로 사용하도록 설정 | 제안 사항 |
| 적용 가능한 언어 | C# 및 Visual Basic |
원인
ThreadStaticAttribute 주석이 추가된 필드는 static(visual Basic에서는 Shared) 생성자에서 인라인으로 또는 명시적으로 초기화됩니다.
규칙 설명
ThreadStaticAttribute 필드는 인라인 초기화나 명시적인 초기화 대신, 사용 시 지연 초기화되어야 하며, 이는 static(Shared는 Visual Basic에서) 생성자에 적용됩니다.
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
경고를 표시하지 않는 경우
이 규칙의 경고를 표시하지 않는 것이 안전하지만 앱에 예기치 않은 동작을 나타낼 수 있습니다.
관련 항목 보기
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET