我们正在使用WebAPI公开我们当前的逻辑/业务层。根据我的理解,如果我们想要保护我们的自我免受线程饥饿的请求,我们应该制作Async WebAPI控制器,这样就可以弥补大量的并发请求。
我确实理解,由于底层服务/业务层是同步的,因此不会有性能提升。我们的目标是大量并发请求通过。
以下是我正在使用的代码:
public async Task<IHttpActionResult> Get()
{
var result = await Task.Run(() => Service.GetAllCompanies()); //existing business layer
return Ok(result);
}
在任务中包装底层图层,继续并实现目标是很好的。
答案 0 :(得分:5)
我的理解是,如果你的await
- ed方法'实现不是异步的,那么你并没有真正实现你的想法。如果您有CPU绑定的服务方法,那么您只需从请求处理池中释放一个线程,然后在Task.Run();
时启动一个新线程(从同一个池开始),这样您就会产生一些开销从那个开关,但ASP.NET线程池仍然在做工作,所以你没有达到你想要的。
如果您的服务方法可以转换为纯(或大多数纯粹)异步代码,那么您将从自下而上的工作中受益。