Поделиться через


Предупреждение CA2247: конструктор TaskCompletionSource должен иметь значение TaskCreationOptions.

Начиная с .NET 5 правило CA2247 анализатора кода .NET включено по умолчанию. Оно создает предупреждение сборки для вызовов конструктора TaskCompletionSource<TResult>, которые передают аргумент типа TaskContinuationOptions.

Описание изменения

Начиная с .NET 5 пакет SDK для .NET включает анализаторы исходного кода .NET. Некоторые из этих правил включены по умолчанию, в том числе CA2247. Если проект содержит код, нарушающий это правило и настроенный на обработку предупреждений как ошибок, это изменение может нарушить сборку.

Правило CA2247 находит вызовы конструктора TaskCompletionSource<TResult>, которые передают аргумент типа TaskContinuationOptions. Тип TaskCompletionSource<TResult> имеет конструктор, принимающий значение TaskCreationOptions, и другой конструктор, принимающий Object. Если вы случайно передадите значение TaskContinuationOptions вместо значения TaskCreationOptions, конструктор с параметром Object будет вызван во время выполнения. Код будет компилироваться и выполняться, но поведение будет отличаться от ожидаемого.

Представленные версии

5,0

  • Замените аргумент TaskContinuationOptions соответствующим значением TaskCreationOptions. Не отключайте это предупреждение, так как оно почти всегда выделяет ошибку в коде. См. раздел CA2247.

  • Чтобы полностью отключить анализ кода, задайте для параметра EnableNETAnalyzers значение false в файле проекта. Дополнительные сведения см. в разделе EnableNETAnalyzers.

Затронутые API