2017-06-08 5 views
1

Ich habe OWIN-Authentifizierung in meinem Projekt implementiert.Aber wenn ich versuche, das Projekt zu bauen, zeigt es einige Fehler.OWIN Authentifizierung: Async-Methode fehlt "erwarten" -Operatoren

Die Verfahren, die Fehler zeigen:

public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
    { 
    //code  
    } 
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
    //code 
    } 

Die darstellende Fehler

Diese Methode async synchron ‚warten‘ Operatoren und läuft fehlt. Ziehen Sie in Erwägung, den Operator 'abwarten' zu verwenden, um nicht blockierende API-Aufrufe abzuwarten, oder 'warten Sie auf Task.Run (...)', um CPU-gebundene Arbeit an einem Hintergrund-Thread auszuführen.

Wie kann ich dieses Problem beheben? Vielen Dank im Voraus für die Antworten!

+0

Bitte zeigen Sie uns den Rest des Codes. –

Antwort

1

async ist nicht Teil der Signatur. Nur weil Sie eine async Methode überschreiben, bedeutet das nicht, dass Sie Ihre Überschreibung als async markieren müssen. Wenn Sie in Ihrem Code keine await s haben, entfernen Sie einfach die async Markierung.

public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
{ 
//code  
} 
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
{ 
//code 
} 
+1

Aber wenn ich die Async-Methode aus der Methodensignatur entfernte, wird ein Fehler angezeigt: "Nicht alle Codepfade geben einen Wert zurück" –

0

Wenn Sie keine await Operator in der Implementierung der Funktion verwenden, dann können Sie den async Modifikator entfernen. Wenn Sie es entfernen, erwartet der Compiler jedoch, dass Sie einen Rückgabewert für Task bereitstellen. Sie können natürlich erstellen Task aber Sie wählen, aber in diesem Fall könnten Sie nur wollen, kehrt die folgenden (die discussed here ist):

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
{ 
    return Task.FromResult<object>(null); 
} 
Verwandte Themen