【发布时间】:2017-07-05 16:39:28
【问题描述】:
我有 .NET 核心 Web API 作为服务层。服务层有所有的 EF 代码。
如果有带有此代码的基本控制器
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 在这里。
-
某项服务有一些使用实体框架核心的 crud 操作。明天我也可能有一个名为 feedService 的服务,它将调用使用 httpclient 从外部 Web 获取提要。我希望我的 api 从异步等待中受益。上述模式是否可以满足这些需求 + 任何问题或改进。?
标签: c# asp.net-web-api asp.net-core async-await