Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
| Свойство | Значение |
|---|---|
| Идентификатор правила | CA2247 |
| Заголовок | Аргумент, переданный в конструктор TaskCompletionSource, должен быть перечислением TaskCreationOptions, а не TaskContinuationOptions. |
| Категория | Использование |
| Исправление является критическим или не критическим | неразрывный |
| Включен по умолчанию в .NET 10 | Как предупреждение |
| Применимые языки | C# и Visual Basic |
Причина
Создание System.Threading.Tasks.TaskCompletionSource со значением перечисления System.Threading.Tasks.TaskContinuationOptions вместо System.Threading.Tasks.TaskCreationOptions.
Использование метода System.Object.ReferenceEquals для проверки одного или нескольких типов значений на равенство.
Описание правила
Тип TaskCompletionSource имеет конструктор, принимающий значение перечисления System.Threading.Tasks.TaskCreationOptions, и другой конструктор, принимающий Object. Случайная передача значения перечисления System.Threading.Tasks.TaskContinuationOptions вместо значения перечисления System.Threading.Tasks.TaskCreationOptions приведет к вызову конструктора на основе Object: он будет компилироваться и выполняться, но его поведение будет отличаться от ожидаемого.
Устранение нарушений
Чтобы устранить нарушение, замените значение перечисления System.Threading.Tasks.TaskContinuationOptions соответствующим значением перечисления System.Threading.Tasks.TaskCreationOptions.
// Violation
var tcs = new TaskCompletionSource<int>(TaskContinuationOptions.RunContinuationsAsynchronously);
// Fixed
var tcs = new TaskCompletionSource<int>(TaskCreationOptions.RunContinuationsAsynchronously);
Когда лучше отключить предупреждения
Нарушение этого правила почти всегда означает ошибку в вызывающем коде, поэтому код не будет работать так, как ожидалось, поскольку TaskCompletionSource пропускает указанный параметр. Единственным случаем, когда безопасно подавлять предупреждение, является ситуация, когда разработчик действительно намеревается передать упакованный System.Threading.Tasks.TaskContinuationOptions в качестве аргумента состояния объекта для TaskCompletionSource.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA2247
// The code that's violating the rule is on this line.
#pragma warning restore CA2247
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA2247.severity = none
Чтобы отключить эту всю категорию правил, задайте уровень серьезности для категории none в файле конфигурации.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Usage.severity = none
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".