Сделать метод синхронным (IDE0390 и IDE0391)

Property Value
Идентификатор правила IDE0390, IDE0391
Заголовок Сделать метод синхронным
Категория Style
Подкатегории Ненужные правила кода (параметры модификатора)
Применимые языки C#
Параметры Нет

Обзор

Эти правила помечают async методы, которые не содержат await выражений. Для повышения производительности удалите модификатор async и измените возвращаемый тип, так как метод async, который никогда ничего не await, выполняется синхронно, но с накладными расходами на машину состояний async.

Два правила предназначены для разных сценариев:

  • IDE0390: сообщает async методы, локальные функции и лямбда-выражения, которые не являются реализациями интерфейса или переопределениями.
  • IDE0391: Сообщает о async методах, реализующих член интерфейса или переопределяющих метод базового класса.

Чтобы не нарушить возможность вызывающего кода await вызывать метод через интерфейс, соблюдайте осторожность при применении исправления к реализациям интерфейсов или переопределениям. Удаление async может иметь различные последствия для поведения в этих случаях.

Example

// Code with violations.

// IDE0390: Regular method with no 'await'.
public async Task<int> GetValueAsync()
{
    return 42;
}

// IDE0391: Override method with no 'await'.
public override async Task<string> GetNameAsync()
{
    return "example";
}

// Fixed code.

// Remove 'async' and return the value directly.
public Task<int> GetValueAsync()
{
    return Task.FromResult(42);
}

// Remove 'async' and return the value directly.
public override Task<string> GetNameAsync()
{
    return Task.FromResult("example");
}

Отключение предупреждений

Если вы хотите отключить только одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

#pragma warning disable IDE0390
// The code that's violating the rule is on this line.
#pragma warning restore IDE0390

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

[*.cs]
dotnet_diagnostic.IDE0390.severity = none
dotnet_diagnostic.IDE0391.severity = none

Чтобы отключить все правила стиля кода, задайте уровень серьезности для категории Stylenone в файле конфигурации.

[*.cs]
dotnet_analyzer_diagnostic.category-Style.severity = none

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

См. также