Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| 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.