Regras de confiabilidade

As regras de confiabilidade dão suporte à confiabilidade de biblioteca e de aplicativo, como o uso correto de memória e de thread. As regras de confiabilidade incluem:

Regra Descrição
CA2000: Descartar objetos antes de perder o escopo Como pode ocorrer um evento excepcional que impedirá a execução do finalizador de um objeto, o objeto deve ser explicitamente descartado antes que todas as referências a ele estejam fora do escopo.
CA2002: Não bloquear objetos com identidade fraca Diz-se que um objeto tem uma identidade fraca quando puder ser acessado diretamente em todos os limites de domínio do aplicativo. Um thread que tente adquirir um bloqueio em um objeto com uma identidade fraca pode ser bloqueado por um segundo thread em um domínio de aplicativo diferente com um bloqueio no mesmo objeto.
CA2007: não aguardar diretamente uma tarefa Um método assíncrono aguarda um Task diretamente.
CA2008: Não criar tarefas sem passar um TaskScheduler Uma operação de criação ou continuação de tarefa usa uma sobrecarga de método que não especifica um parâmetro TaskScheduler.
CA2009: Não chamar ToImmutableCollection em um valor ImmutableCollection O método ToImmutable foi chamado desnecessariamente em uma coleção imutável do namespace System.Collections.Immutable.
CA2011: Não atribuir a propriedade em seu próprio setter Uma propriedade recebeu acidentalmente um valor dentro de seu próprio acessador de conjunto.
CA2012: Usar ValueTasks corretamente As ValueTasks retornadas de invocações de membros devem ser aguardadas diretamente. As tentativas de consumir uma ValueTask diversas vezes ou de acessar diretamente o resultado de uma antes que ela seja concluída podem resultar em uma exceção ou corrupção. Ignorar a ValueTask é provavelmente uma indicação de um bug funcional e pode prejudicar o desempenho.
CA2013: Não usar ReferenceEquals com tipos de valor Ao comparar valores usando System.Object.ReferenceEquals, se objA e objB forem tipos de valor, eles serão colocados em caixas antes de serem transmitidos ao método ReferenceEquals. Isso significa que, mesmo que objA e objB representem a mesma instância de um tipo de valor, o método ReferenceEquals retorna false.
CA2014: não usar stackalloc em loops. O espaço de pilha alocado por um stackalloc só é liberado no final da invocação do método atual. Usá-lo em um loop pode resultar em crescimento de pilha ilimitado e em eventuais condições de estouro de pilha.
CA2015: não definir finalizadores para tipos derivados de MemoryManager<T> Adicionar um finalizador a um tipo derivado de MemoryManager<T> pode permitir que a memória seja liberada enquanto ainda em uso por um Span<T>.
CA2016: Encaminhe o parâmetro CancellationToken para os métodos que recebem um Encaminhe o parâmetro CancellationToken para os métodos que o usam a fim de garantir que as notificações de cancelamento de operação sejam propagadas corretamente ou transmita CancellationToken.None explicitamente para indicar que o token não será propagado intencionalmente.
CA2017: incompatibilidade de contagem de parâmetros O número de parâmetros fornecido no modelo de mensagem de registro em log não corresponde ao número de espaços reservados nomeados.
CA2018: o argumento count para Buffer.BlockCopy deve especificar o número de bytes a serem copiados Ao usar Buffer.BlockCopy, o argumento count especifica o número de bytes a serem copiados. Você só deve usar Array.Length para o argumento count em matrizes com elementos que têm exatamente um byte de tamanho. As matrizes byte, sbyte e bool têm elementos com o tamanho de um byte.
CA2019: os campos ThreadStatic não devem usar inicialização embutida Um campo anotado com ThreadStaticAttribute é inicializado em linha ou explicitamente em um construtor static (Shared no Visual Basic).
CA2020: impedir alteração comportamental causada por operadores internos de IntPtr/UIntPtr Alguns operadores internos adicionados ao .NET 7 se comportam de forma diferente dos operadores definidos pelo usuário no .NET 6 e versões anteriores. Alguns operadores que costumavam gerar contexto desmarcado durante o estouro não são mais gerados, a menos que estejam encapsulados dentro do contexto verificado. Alguns operadores que anteriormente não lançavam o contexto verificado agora são lançados, a menos que estejam encapsulados dentro do contexto desmarcado.
CA2021: não chame Enumerable.Cast<T> ou Enumerable.OfType<T> com tipos incompatíveis Uma chamada a Enumerable.Cast<TResult>(IEnumerable) ou Enumerable.OfType<TResult>(IEnumerable) especifica um parâmetro de tipo que é incompatível com o tipo da coleção de entrada.