Partilhar via


CA2025: Não passe instâncias 'IDisposable' para tarefas não esperadas

Propriedade Valor
ID da regra CA2025
Título Não passe instâncias 'IDisposable' para tarefas não esperadas
Categoria Fiabilidade
A correção é invasiva ou não invasiva Inquebrável
Ativado por padrão no .NET 10 Não

Motivo

Uma IDisposable instância é passada para uma tarefa não esperada e potencialmente descartada antes que a tarefa seja concluída usando a instância.

Descrição da regra

As tarefas não esperadas que usam IDisposable instâncias podem usá-las muito depois de terem sido descartadas. Certifique-se de que as tarefas que usam essas instâncias estão concluídas antes de as instâncias serem descartadas.

Exemplos

Os seguintes trechos de código (e seus equivalentes do Visual Basic) são violações do 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);
}

Quando suprimir avisos

Suprima esses avisos se souber que as tarefas terminam de usar IDisposable instâncias antes de serem descartadas.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

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

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua gravidade como none no arquivo de configuração .

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.