Правила надежности
Правила надежности поддерживают безотказность библиотек и приложений, например посредством правильного использования памяти и потоков. Ниже приведены правила надежности.
Правило | Description |
---|---|
CA2000: удалите объекты до того, как будет потеряна область действия | Необходимо явно удалить объект до того, как все ссылки на него окажутся вне области действия, так как может произойти исключительное событие, которое воспрепятствует выполнению метода завершения объекта. |
CA2002: не блокировать объекты со слабой идентификацией | К объекту со слабой идентификацией может быть получен прямой доступ через границы домена приложения. Поток пытается получить блокировку объекта со слабой идентификацией, который может быть заблокирован вторым потоком в другом домене приложения, имеющим блокировку того же объекта. |
CA2007: не ожидайте непосредственно задачи | Асинхронный метод ожидает класс Task напрямую. |
CA2008: не создавайте задачи без передачи TaskScheduler | Операция создания или продолжения задачи использует перегрузку метода, в которой не указан параметр TaskScheduler. |
CA2009: не вызывайте ToImmutableCollection в неизменяемом значенииCollection | Метод ToImmutable был без необходимости вызван для неизменяемой коллекции из пространства имен System.Collections.Immutable. |
CA2011: не назначайте свойство в своем наборе | Свойству было случайно присвоено значение в его методе доступа set. |
CA2012: правильно используйте ValueTasks | Экземпляры ValueTask, возвращаемые из вызовов элементов, предназначены для непосредственного ожидания. Попытки использовать ValueTask несколько раз или для прямого доступа к результату до его завершения могут привести к возникновению исключения или повреждения. Игнорирование ValueTask, скорее всего, указывает на функциональную ошибку и может привести к снижению производительности. |
CA2013: не используйте ReferenceEquals с типами значений | Если при сравнении значений с помощью System.Object.ReferenceEquals objA и objB являются типами значений, то перед передачей они упаковываются в метод ReferenceEquals. Это означает, что даже если и objA, и objB представляют один и тот же экземпляр типа значения, метод ReferenceEquals все равно возвращает значение false. |
CA2014: не используйте stackalloc в циклах. | Пространство стека, выделенное stackalloc, освобождается только в конце вызова текущего метода. Использование его в цикле может привести к неограниченному росту стека и появлению условий переполнения стека. |
CA2015: не определяйте методы завершения для типов, производных от MemoryManager<T> | Добавление метода завершения к типу, производному от MemoryManager<T>, может привести к освобождению памяти, пока она еще используется Span<T>. |
CA2016: переадресация параметра CancellationToken в методы, которые принимают один | Перенаправьте параметр CancellationToken в методы, чтобы обеспечить правильное распространение уведомлений об отмене операции, или явно передайте CancellationToken.None , чтобы указать, что маркер не распространяется намеренно. |
CA2017: несоответствие счетчика параметров | Количество параметров, предоставленных в шаблоне сообщения ведения журнала, не соответствует числу именованных заполнителей. |
CA2018: аргумент count в Buffer.BlockCopy должен задавать число байт копирования |
При использовании Buffer.BlockCopy аргумент count указывает число копируемых байт. Использовать Array.Length для аргумента count следует только с массивами с размером элементов ровно один байт. Массивы с однобайтовым размером элементов: byte , sbyte и bool . |
CA2019: ThreadStatic поля не должны использовать встроенную инициализацию |
Поле, помеченное аннотацией, ThreadStaticAttribute инициализируется встроенным или явным образом в static конструкторе (Shared в Visual Basic). |
CA2020: предотвращение изменения поведения, вызванного встроенными операторами IntPtr/UIntPtr | Некоторые встроенные операторы, добавленные в .NET 7, ведут себя не так, как определяемые пользователем операторы в .NET 6 и более ранних версиях. Некоторые операторы, которые использовались для вызова не проверка проверка контекста при переполнении, больше не вызываются, если не упакованы в проверка контексте. Некоторые операторы, которые ранее не вызвали проверка контексте, теперь вызываются, если только не упакованы в не проверка контексте. |
CA2021: не вызывайте Enumerable.Cast<T или Enumerable.OfType<T>> с несовместимыми типами | Вызов Enumerable.Cast<TResult>(IEnumerable) или Enumerable.OfType<TResult>(IEnumerable) задает параметр типа, несовместимый с типом входной коллекции. |
Совместная работа с нами на GitHub
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.