Partager via


CA2025 : Ne pas passer d’instances « IDisposable » dans des tâches non supervisées

Propriété Valeur
Identificateur de la règle CA2025
Titre Ne pas passer d’instances « IDisposable » dans des tâches non supervisées
Catégorie Fiabilité
Le correctif est cassant ou non cassant Inaltérable
activé par défaut dans .NET 10 Non

La cause

Une IDisposable instance est passée dans une tâche non supervisée et potentiellement supprimée avant la fin de la tâche à l’aide de l’instance.

Description de la règle

Les tâches non supervisées qui utilisent IDisposable des instances peuvent utiliser ces instances longtemps après leur suppression. Vérifiez que les tâches utilisant ces instances sont terminées avant la suppression des instances.

Exemples

Les extraits de code suivants (et leurs équivalents Visual Basic) sont des violations de l’autorité de certification 2025 :

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);
}

Quand supprimer les avertissements

Supprimez ces avertissements si vous savez que les tâches se terminent à l’aide IDisposable d’instances avant qu’elles ne soient supprimées.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.