Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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.