Исправление является критическим или не критическим
Не критическое
Включен по умолчанию в .NET 9
Как предложение
Причина
Это правило находит вызовы методов, которые могут принимать параметр CancellationToken, но не передают его. Оно предлагает переадресовывать им CancellationToken родительского метода.
Описание правила
Это правило анализирует определения методов, которые принимают CancellationToken в качестве последнего параметра, затем анализирует все методы, вызываемые в его теле. Если какой-либо вызов метода может принять CancellationToken в качестве последнего параметра или у него есть перегрузка, которая принимает CancellationToken в качестве последнего параметра, правило предлагает использовать этот параметр вместо того, чтобы убедиться, что уведомление об отмене распространяется на все операции, которые могут его прослушивать.
Примечание
Правило CA2016 доступно во всех версиях .NET, где доступен тип CancellationToken. Сведения о применимых версиях см. в разделе "Применение к" в разделе "ОтменаToken".
Устранение нарушений
Вы можете исправить нарушения вручную или использовать исправление кода, доступное в Visual Studio. Наведите указатель мыши на лампочку, которая отображается рядом с вызовом метода и выберите предлагаемое изменение.
В следующем примере показаны два предлагаемых изменения.
Вывод предупреждений для этого правила можно отключить, если вас не беспокоит сокращение числа вызовов методов из-за пересылки уведомлений об отмене операций. Кроме того, можно явным образом передать default в C# (Nothing в Visual Basic) или None.
Правило может обнаруживать различные нарушения. Ниже приведены примеры случаев, которые может обнаруживать это правило.
Пример 1
Правило предложит переслать параметр c из MyMethod в вызов MyMethodWithDefault, так как метод определяет дополнительный параметр токена:
C#
using System.Threading;
namespaceConsoleApp
{
publicstaticclassMyTestClass
{
publicstaticvoidMyMethodWithDefault(CancellationToken ct = default)
{
}
publicstaticvoidMyMethod(CancellationToken c)
{
MyMethodWithDefault();
}
}
}
Исправление:
Перешлите параметр c:
C#
publicstaticvoidMyMethod(CancellationToken c)
{
MyMethodWithDefault(c);
}
Если вас не беспокоит сокращение числа вызовов методов из-за пересылки уведомлений об отмене, можно выполнить одно из следующих действий.
Явным образом передайте default:
C#
publicstaticvoidMyMethod(CancellationToken c)
{
MyMethodWithDefault(default);
}
Или явным образом передайте CancellationToken.None:
C#
publicstaticvoidMyMethod(CancellationToken c)
{
MyMethodWithDefault(CancellationToken.None);
}
Пример 2
Правило предложит переслать параметр c из MyMethod в вызов MyMethodWithOverload, так как у метода есть перегрузка, которая принимает параметр CancellationToken:
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.