Methode synchroon maken (IDE0390 en IDE0391)

Property Value
Regel-ID IDE0390, IDE0391
Title Methode synchroon maken
Categorie Style
Subcategorie Onnodige coderegels (wijzigingsvoorkeuren)
Toepasselijke talen C#
Options Geen

Overview

Deze regels markeren async methoden die geen expressies bevatten await . Voor betere prestaties verwijdert u de async modifier en past u het returntype aan, omdat een async methode die nooit iets await synchronisch wordt uitgevoerd, maar wel met de overhead van de async-statusmachine.

De twee regels zijn gericht op verschillende scenario's:

  • IDE0390: Rapporteert async methoden, lokale functies en lambda-expressies die geen interface-implementaties of overschrijvingen zijn.
  • IDE0391: rapporteert async methoden die een interfacelid implementeren of een basisklassemethode overschrijven.

Om te voorkomen dat de mogelijkheid voor aanroepers om de methode via de interface te await verloren gaat, moet u voorzichtig zijn bij het toepassen van de oplossing op interface-implementaties of overschrijvingen. Verwijderen async kan in die gevallen verschillende gedragseffecten hebben.

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

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Als u alle regels voor de codestijl wilt uitschakelen, stelt u de ernst voor de categorie Style in op none in het configuratiebestand.

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

Zie Hoe u codeanalysewaarschuwingen kunt onderdrukken voor meer informatie.

Zie ook