Compartilhar via


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

Propriedade Valor
ID da regra CA2025
Título Não passe instâncias 'IDisposable' em tarefas desacordadas
Categoria Confiabilidade
Correção é disruptiva ou não disruptiva Sem interrupção
Habilitado por padrão no .NET 10 Não

Motivo

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

Descrição da regra

Tarefas desapertadas que usam IDisposable instâncias podem usar essas instâncias muito tempo depois de serem descartadas. Certifique-se de que as tarefas que utilizam essas instâncias sejam concluídas antes que as instâncias sejam descartadas.

Exemplos

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

Suprime esses avisos se você souber que as tarefas terminam usando IDisposable instâncias antes de serem descartadas.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processador ao arquivo de origem para desabilitar a regra e, em seguida, habilitá-la novamente.

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

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

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

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