我有.NET核心Web API作为服务层。服务层具有全部EF代码。在webapi中使用async等待的最佳做法
如果有basecontroller与此代码
protected Task<IActionResult> NewTask(Func<IActionResult> callback)
{
return Task.Factory.StartNew(() =>
{
try
{
return callback();
}
catch (Exception ex)
{
Logger.LogError(ex.ToString());
throw;
}
});
}
在控制器动作我包裹的所有呼叫在上述方法中例如以服务:
[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核心的crud操作。也明天我可能有一个名为feedService的服务,它将使用httpclient调用外部Web获取提要。我希望我的api能够从异步中获益。等待上面的模式将满足这些需求+任何问题或改进。 – krishna