Sdílet prostřednictvím


CA2025: Nepředávejte instance IDisposable do nezařazených úloh

Vlastnictví Hodnota
Identifikátor pravidla CA2025
Titul Nepředávejte instance IDisposable do nezablokovaných úloh.
Kategorie Spolehlivost
Oprava je destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v rozhraní .NET 10 Ne

Příčina

Instance IDisposable se předá do nezařazené úlohy a potenciálně se vyřadí před dokončením úkolu pomocí instance.

Popis pravidla

Nezařazené úlohy, které používají IDisposable instance, můžou tyto instance používat dlouho po jejich vyřazení. Ujistěte se, že úlohy využívající tyto instance jsou dokončeny před tím, než budou instance odstraněny.

Příklady

Následující fragmenty kódu (a jejich ekvivalenty jazyka Visual Basic) jsou porušení 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);
}

Kdy potlačit upozornění

Potlačit tato upozornění, pokud víte, že úkoly se dokončí pomocí IDisposable instancí před jejich odstraněním.

Potlačte upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.