재산 | 가치 |
---|---|
규칙 아이디 | CA2025 |
타이틀 | 'IDisposable' 인스턴스를 통합되지 않은 작업에 전달하지 마세요. |
범주 | 신뢰성 |
수정 사항이 문제를 해결하고 있는지 혹은 새로운 문제를 일으키지 않는지 여부 | 비손상 |
.NET 10 기본적으로 사용하도록 설정 | 아니오 |
원인
IDisposable
인스턴스는 종료되지 않은 작업으로 전달되고 인스턴스 사용을 완료하기 전에 삭제될 수 있습니다.
규칙 설명
인스턴스를 사용하는 IDisposable
통합되지 않은 작업은 삭제된 후 해당 인스턴스를 오래 사용할 수 있습니다. 인스턴스를 삭제하기 전에 해당 인스턴스를 사용하는 작업이 완료되었는지 확인합니다.
예시
다음 코드 조각(및 해당 Visual Basic에 해당하는 코드)은 CA2025의 위반입니다.
public Task DoSomethingAsync()
{
// Using statements and using blocks can both be violations.
using (var disposable = new DisposableThing())
{
return DoSomethingInternalAsync(disposable);
}
}
public async Task DoThingsAsync()
{
var disposable = new DisposableThing();
var task = DoSomethingInternalAsync(disposable);
// More code here.
dispose.Dispose();
// It's a violation if arguments are disposed before the task is awaited.
await task.ConfigureAwait(false);
}
경고를 표시하지 않는 경우
작업이 삭제되기 전에 인스턴스를 사용하여 IDisposable
완료된 것을 알고 있는 경우 이러한 경고를 표시하지 않습니다.
경고 표시 안 함
단일 위반을 억제하려면 소스 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 다음 다시 활성화하세요.
#pragma warning disable CA2025
// The code that's violating the rule is on this line.
#pragma warning restore CA2025
파일, 폴더 또는 프로젝트에 대한 규칙을 비활성화하려면 none
에서 해당 심각도를 로 설정하세요.
[*.{cs,vb}]
dotnet_diagnostic.CA2025.severity = none
자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.
GitHub에서 Microsoft와 공동 작업
이 콘텐츠의 원본은 GitHub에서 찾을 수 있으며, 여기서 문제와 끌어오기 요청을 만들고 검토할 수도 있습니다. 자세한 내용은 참여자 가이드를 참조하세요.
.NET