Compartir a través de


CA2025: No pasar instancias "IDisposable" a tareas no reservadas

Propiedad Importancia
Identificador de la regla CA2025
Título No pasar instancias de "IDisposable" a tareas no reservadas
Categoría Confiabilidad
La corrección es disruptiva o no disruptiva Poco problemático
Habilitado de forma predeterminada en la de .NET 10 No

Causa

Una IDisposable instancia se pasa a una tarea no reservada y se elimina potencialmente antes de que la tarea termine de usar la instancia.

Descripción de la regla

Las tareas no reservadas que usan IDisposable instancias pueden usar esas instancias mucho después de que se hayan eliminado. Asegúrese de que las tareas que usan esas instancias se completen antes de que estas se eliminen.

Ejemplos

Los siguientes fragmentos de código (y sus equivalentes de Visual Basic) son infracciones de 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);
}

Cuándo suprimir las advertencias

Suprima estas advertencias si sabe que las tareas terminan de usar IDisposable instancias antes de eliminarlas.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su severidad none en el archivo de configuración.

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

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.