Uczyń metodę synchroniczną (IDE0390 i IDE0391)

Property Value
Identyfikator reguły IDE0390, IDE0391
Title Ustaw metodę jako synchroniczną
Kategoria Style
Podkategorii Niepotrzebne reguły kodu (preferencje modyfikatora)
Zastosowane języki C#
Options Żadne

Overview

Te reguły flagują async metody, które nie zawierają żadnych await wyrażeń. Aby uzyskać lepszą wydajność, usuń modyfikator async i dostosuj typ zwracany, ponieważ metoda async, która nigdy niczego nie await, działa synchronicznie, ale z narzutem asynchronicznej maszyny stanów.

Dwie reguły są przeznaczone dla różnych scenariuszy:

  • IDE0390: Zgłasza async metody, funkcje lokalne i wyrażenia lambda, które nie są implementacjami interfejsu ani przesłonięciami.
  • IDE0391: Zgłasza async metody, które implementują składnik interfejsu lub przesłaniają metodę klasy bazowej.

Aby uniknąć przerywania możliwości wywołań await metody za pośrednictwem interfejsu, należy zachować ostrożność podczas stosowania poprawki do implementacji interfejsu lub przesłonięć. Usunięcie async może mieć różne implikacje behawioralne w tych przypadkach.

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");
}

Pomijanie ostrzeżenia

Jeśli chcesz pominąć tylko jedno naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby wyłączyć wszystkie reguły stylu kodu, ustaw ważność dla kategorii Style na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także