2017-06-08 20 views
1

私のプロジェクトでOWIN認証を実装しました。しかし、プロジェクトをビルドしようとすると、いくつかのエラーが表示されます。エラーを示しているOWIN認証:非同期メソッドに 'await'オペレータがありません

方法:

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

示すエラーが

あるこの非同期メソッドは、演算子を「待つ」と同期的に実行されます欠けています。 'await'演算子を使用してノンブロッキングAPI呼び出しを待機するか、 'await Task.Run(...)'を使用してバックグラウンドスレッドでCPUバインド作業を行うことを検討してください。

この問題を解決するにはどうすればよいですか? 事前にお返事ありがとうございます!

+0

私たちのコードの残りの部分をご提示ください。 –

答えて

1

asyncは、であり、署名の一部ではありません。 asyncメソッドをオーバーライドしているという理由だけで、オーバーライドをasyncとマークする必要はありません。

コードにawaitが含まれていない場合は、asyncマークを削除してください。

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

しかし、メソッドシグネチャから非同期を削除したとき、「すべてのコードパスが値を返すわけではありません」というエラーが表示されています –

0

あなたは、あなたがasync修飾子を削除することができ、関数の実装でawait演算子を使用していない場合。

ただし、一度削除すると、コンパイラはTaskの戻り値を提供することを期待します。あなたは明らかにあなたが選択したが、この例ではあなただけ(discussed hereである)以下を返すようにしたいかもしれませんがTaskを作成することができます。

public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
{ 
    return Task.FromResult<object>(null); 
} 
関連する問題