Freigeben über


CA2025: Übergeben Sie "IDisposable"-Instanzen nicht an nicht eingeawate Aufgaben.

Eigentum Wert
Regel-ID CA2025
Titel Übergeben Sie "IDisposable"-Instanzen nicht an nicht eingeawate Aufgaben.
Kategorie Zuverlässigkeit
Fix ist unterbrechend oder nicht durchbrechend Untrennbar
Standardmäßig in .NET 10 aktiviert Nein

Ursache

Eine IDisposable Instanz wird an eine nicht geöffnete Aufgabe übergeben und potenziell verworfen, bevor die Aufgabe mit der Instanz fertig gestellt wird.

Regelbeschreibung

Nicht abgerufene Aufgaben, die Instanzen verwenden IDisposable , verwenden diese Instanzen möglicherweise lange, nachdem sie verworfen wurden. Stellen Sie sicher, dass Aufgaben, die diese Instanzen verwenden, abgeschlossen werden, bevor die Instanzen verworfen werden.

Beispiele

Die folgenden Codeausschnitte (und ihre Visual Basic-Entsprechungen) sind Verstöße gegen 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);
}

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie diese Warnungen, wenn Sie wissen, dass Aufgaben die Verwendung von IDisposable Instanzen abgeschlossen haben, bevor sie verworfen werden.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, setzen Sie dessen Schweregrad auf none in der Konfigurationsdatei fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.