Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имущество | Значение |
---|---|
Идентификатор правила | CA2008 |
Заголовок | Не создавайте задачи без передачи TaskScheduler |
Категория | Надежность |
Исправление является разрушающим или неразрушающим | Неразрывное |
Включен по умолчанию в .NET 9 | Нет |
Причина
Операция создания или продолжения задачи использует перегрузку метода, в которой не указан параметр TaskScheduler.
Описание правила
Следующие методы создания и продолжения задачи .NET имеют перегрузки, позволяющие указывать или опускать экземпляр TaskScheduler:
Всегда указывайте явный аргумент TaskScheduler, чтобы избежать значения по умолчанию Current, поведение которого определяется вызывающим объектом и может меняться в среде выполнения. Current возвращает планировщик, связанный с Task, который в данный момент выполняется в этом потоке. Если такой задачи нет, возвращается значение Default, представляющее пул потоков. Использование Current может привести к взаимоблокировкам или проблемам со скоростью реагирования пользовательского интерфейса в некоторых ситуациях, когда планировалось создание задачи в пуле потоков, а вместо этого ожидается возврат в поток пользовательского интерфейса.
Дополнительные сведения и подробные примеры см. в разделе Новые TaskCreationOptions и TaskContinuationOptions в .NET Framework 4.5.
Примечание.
VSTHRD105. Избегайте перегрузок методов, предполагающих TaskScheduler.Current — это аналогичное правило, реализованное в пакете Microsoft.VisualStudio.Threading.Analyzers.
Устранение нарушений
Чтобы устранить нарушения, вызовите перегрузку метода, которая принимает TaskScheduler, и явно передайте Default или Current для четкости намерения.
Когда лучше отключить предупреждения
Это предупреждение предназначено прежде всего для библиотек, где код может выполняться в произвольных средах, и не следует делать предположений о среде или о том, как вызывающий метод объект может его вызывать или ожидать его выполнения. Может быть целесообразно отключить это предупреждение для проектов, представляющих код приложения, а не код библиотеки.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA2008
// The code that's violating the rule is on this line.
#pragma warning restore CA2008
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA2008.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.