Udostępnij za pomocą


CA2025: Nie przekazuj wystąpień "IDisposable" do zadań niezapoznanych

Majątek Wartość
Identyfikator reguły CA2025
Tytuł Nie przekazuj wystąpień "IDisposable" do zadań niezapoznanych
Kategoria Niezawodność
Poprawka jest przełomowa lub nieprzełomowa Niełamiący
domyślnie włączone na platformie .NET 10 Nie.

Przyczyna

Wystąpienie IDisposable jest przekazywane do nienazwytowanego zadania i potencjalnie usuwane przed zakończeniem zadania przy użyciu wystąpienia.

Opis reguły

Zadania bez obsługi, które używają IDisposable wystąpień, mogą używać tych wystąpień długo po ich usunięciu. Upewnij się, że zadania korzystające z tych wystąpień są wykonane przed usunięciem wystąpień.

Przykłady

Następujące fragmenty kodu (i ich odpowiedniki języka Visual Basic) są naruszeniami 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);
}

Kiedy pomijać ostrzeżenia

Pomiń te ostrzeżenia, jeśli wiesz, że zadania zakończą korzystanie z IDisposable wystąpień przed ich usunięciem.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

#pragma warning disable CA2025
// The code that's violating the rule is on this line.
#pragma warning restore CA2025

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

[*.{cs,vb}]
dotnet_diagnostic.CA2025.severity = none

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.