Regras de fiabilidade
As regras de confiabilidade oferecem suporte à confiabilidade da biblioteca e do aplicativo, como o uso correto de memória e thread. As regras de fiabilidade incluem:
Regra | Descrição |
---|---|
CA2000: Descarte objetos antes de perder o escopo | Como pode ocorrer um evento excecional 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 bloqueie objetos com identidade fraca | Diz-se que um objeto tem uma identidade fraca quando pode ser acessado diretamente através dos limites do domínio do aplicativo. Um thread que tenta adquirir um bloqueio em um objeto que tem uma identidade fraca pode ser bloqueado por um segundo thread em um domínio de aplicativo diferente que tenha um bloqueio no mesmo objeto. |
CA2007: Não aguarde diretamente uma tarefa | Um método assíncrono aguarda um Task diretamente. |
CA2008: Não crie tarefas sem passar por um TaskScheduler | Uma operação de criação ou continuação de tarefas usa uma sobrecarga de método que não especifica um parâmetro TaskScheduler. |
CA2009: Não chame ToImmutableCollection em um valor ImmutableCollection |
ToImmutable método foi chamado desnecessariamente em uma coleção imutável de System.Collections.Immutable namespace. |
CA2011: Não atribua propriedade dentro de seu setter | Uma propriedade foi acidentalmente atribuída um valor dentro de seu próprio conjunto acessador. |
CA2012: Use ValueTasks corretamente | ValueTasks retornados de invocações de membro destinam-se a ser aguardados diretamente. Tentativas de consumir um ValueTask várias vezes ou acessar diretamente o resultado antes que se saiba que ele foi concluído podem resultar em uma exceção ou corrupção. Ignorar tal ValueTask é provavelmente uma indicação de um bug funcional e pode degradar o desempenho. |
CA2013: Não use ReferenceEquals com tipos de valor | Ao comparar valores usando System.Object.ReferenceEquals, se objA e objB são tipos de valor, eles são encaixotados antes de serem passados para o 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 use 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 ilimitado da pilha e eventuais condições de estouro da pilha. |
CA2015: Não defina finalizadores para tipos derivados do MemoryManager<T> | Adicionar um finalizador a um tipo derivado de MemoryManager<T> pode permitir que a memória seja liberada enquanto ainda está em uso por um Span<T>. |
CA2016: Encaminhe o parâmetro CancellationToken para métodos que levam um | Encaminhe o parâmetro CancellationToken para métodos que usam um para garantir que as notificações de cancelamento da operação sejam propagadas corretamente ou passe CancellationToken.None explicitamente para indicar intencionalmente não propagar o token. |
CA2017: Incompatibilidade de contagem de parâmetros | O número de parâmetros fornecidos no modelo de mensagem de 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 cujos elementos tenham exatamente um byte de tamanho.
byte matrizes , sbyte e bool têm elementos de tamanho de um byte. |
CA2019: ThreadStatic campos não devem usar inicialização embutida |
Um campo anotado com ThreadStaticAttribute é inicializado embutido ou explicitamente em um construtor static (Shared no Visual Basic). |
CA2020: Prevenir mudanças comportamentais causadas por operadores integrados de IntPtr/UIntPtr | Alguns operadores internos adicionados no .NET 7 se comportam de forma diferente dos operadores definidos pelo usuário no .NET 6 e versões anteriores. Alguns operadores que costumavam lançar em contexto não verificado enquanto transbordava não lançam mais, a menos que envolvidos dentro do contexto verificado. Alguns operadores que antes não jogavam no contexto verificado agora lançam, a menos que embrulhados dentro do contexto não verificado. |
CA2021: Não chame Enumerable.Cast<T> ou Enumerable.OfType<T> com tipos incompatíveis | Uma chamada para Enumerable.Cast<TResult>(IEnumerable) ou Enumerable.OfType<TResult>(IEnumerable) especifica um parâmetro type que é incompatível com o tipo da coleção de entrada. |
CA2022: Evite leituras inexatas com Stream.Read | Uma chamada para Stream.Read pode retornar menos bytes do que o solicitado, resultando em código não confiável se o valor de retorno não for verificado. |
CA2024: Não use StreamReader.EndOfStream em métodos assíncronos | A propriedade StreamReader.EndOfStream pode causar bloqueio síncrono não intencional quando nenhum dado é armazenado em buffer. Em vez disso, use StreamReader.ReadLineAsync() diretamente, que retorna null ao chegar ao final do fluxo. |
Colabore connosco no GitHub
A origem deste conteúdo pode ser encontrada no GitHub, onde também pode criar e rever problemas e pedidos Pull. Para mais informações, consulte o nosso guia do contribuidor.