サービスコアとして.NETコアWeb APIを使用しています。サービス層にはすべてのEFコードがあります。コントローラのアクションでは、このコードwebapiでasync awaitを使用するためのベストプラクティス
protected Task<IActionResult> NewTask(Func<IActionResult> callback)
{
return Task.Factory.StartNew(() =>
{
try
{
return callback();
}
catch (Exception ex)
{
Logger.LogError(ex.ToString());
throw;
}
});
}
とbasecontrollerがある場合
Iは、例えば、上記の方法では、サービスへのすべての呼び出しをラップ:
[HttpGet("something")]
public async Task<IActionResult> GetSomething(int somethingId)
{
return await NewTask(() =>
{
var result = _somethingService.GetSomething(somethingId);
if (result != null)
return Ok(result);
else
return NotFound("Role not found");
});
}
は、私はアクションで複数のサービスコールを持っているか、他のWebサービスを呼び出すことも明日考えると、この正しいパターンです。お知らせ下さい。
をあなたはここで達成しようとしているのかについての詳細な情報をお願いできますか?あなたのコードは基本的に、バックグラウンドスレッドで同期作業を行うことで非同期作業を偽装します。 Task.Factory.StartNewを使用することはかなり危険であり、代わりにTask.Runを使用する必要がありますが、ここでもTask.Runは必要ありません。 –
何らかのサービスには、entityframeworkコアを使用するいくつかの粗末な操作があります。またtommorrow私は、httpClientを使用して外部Webからのフィードを取得する呼び出しを持つ、feedServiceというサービスを持つかもしれません。私は、私のAPIを非同期的なものから恩恵を受けることを望みます。上記のパターンは、これらのニーズ+あらゆる懸念や改善に役立ちます。 – krishna