おはよう、これはコミュニティの最初の質問です。私はC#WebAPIフレームワークで作業しています。私はすべてのコントローラのメソッドを非同期に変更しようとしています。私のコントローラは、から拡張されています。GenericControllerこれは、DLLからメソッドを呼び出すメソッド(CallWF)を持ち、すべての種類の例外も処理します。ここでWebAPI: 'IHttpActionResult'に 'GetAwaiter'の定義が含まれていません
Layer1/Controllers <===> Layer2/GenericController.CallWF <===> Layer3/DLL Methods
私GenericController.CallWFコード:
protected IHttpActionResult CallWF<T>(Func<T> action)
{
try
{
return Ok(action.Invoke());
}
catch (Exception e1)
{
return(BadRequest(GetMyExceptionMessage(e1)));
}
}
protected IHttpActionResult CallWF(Action action)
{
try
{
action.Invoke();
return Ok();
}
catch (Exception e1)
{
return(BadRequest(GetMyExceptionMessage(e1)));
}
}
そしてここでは、コントローラのメソッドの例です。
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public IHttpActionResult MyMethodA(int arg1)
{
return CallWF<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
}
ご覧のとおり、この方法は同期的です。今私は非同期にしたい。非同期関数を作成する方法を説明するいくつかのWebサイトを読んだ後で、これが解決策であると私は考えていました。
[ResponseType(typeof(string))]
[Route("MyMethodA")]
public async Task<IHttpActionResult> MyMethodA(int arg1)
{
return await CallWF<string>(
() => {
return repositoryA.itsMethodA(arg1);
});
}
しかし、これをやって、それが次のエラーが発生します。別のアプローチを試みる
CS1061 'IHttpActionResult' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'IHttpActionResult' could be found (are you missing a using directive or an assembly reference?)
、私は非同期のための新しいCallWF関数を作成しようとしました。 ここにアプローチがあります。
protected async Task<IHttpActionResult> CallWFAsync<T>(Func<T> action)
{
try
{
IHttpActionResult res = Ok(action.Invoke());
return await Ok(action.Invoke());
}
catch (Exception e1)
{
return (BadRequest(GetMyExceptionMessage(e1)));
}
}
そして、これをやって、それが私のタイトルのエラーが発生します。
CS1061 'OkNegotiatedContentResult' does not contain a definition for 'GetAwaiter' and no extension method 'GetAwaiter' accepting a first argument of type 'OkNegotiatedContentResult' could be found (are you missing a using directive or an assembly reference?)
これを解決するためのアイデアはありますか?誰かが私を助けることを願っています。
例外メッセージは、あなたがawait-ではない何かを返すようにしようとしていることを説明できる。 'await'は' Task'を返す必要はありません。メソッドに非同期機能が実際に必要な場合を除いて、単に 'Task'を返すことができます。あなたは 'Task.FromResult'を使用することができます – Nkosi