CA1849. Вызов асинхронных методов в методе async
Свойство | Значение |
---|---|
Идентификатор правила | CA1849 |
Заголовок | Вызов асинхронных методов при использовании асинхронного метода |
Категория | Производительность |
Исправление является критическим или не критическим | Не критическое |
Включен по умолчанию в .NET 8 | No |
Причина
Все методы, для которых существует эквивалент с суффиксом async, выдают это предупреждение при вызове из метода, возвращающего задачу. Кроме того, это предупреждение возникает при вызове Task.Wait()
, Task<T>.Result
или Task.GetAwaiter().GetResult()
.
Описание правила
В методе, который уже является асинхронным, вызовы других методов должны соответствовать их асинхронным версиям, если они существуют.
Устранение нарушений
Нарушение:
Task DoAsync()
{
file.Read(buffer, 0, 10);
}
Исправление:
Ожидать асинхронную версию метода:
async Task DoAsync()
{
await file.ReadAsync(buffer, 0, 10);
}
Когда лучше отключить предупреждения
Можно отключить вывод предупреждения из этого правила в случае, если существует два отдельных пути к коду для синхронного и асинхронного кода с использованием условия If. Кроме того, если проводится проверка разрешения задачи, можно использовать методы и свойства синхронизации.
Отключение предупреждений
Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.
#pragma warning disable CA1849
// The code that's violating the rule is on this line.
#pragma warning restore CA1849
Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none
в файле конфигурации.
[*.{cs,vb}]
dotnet_diagnostic.CA1849.severity = none
Дополнительные сведения см. в разделе Практическое руководство. Скрытие предупреждений анализа кода.