Fas*_*ani 1 iis asynchronous task-parallel-library asp.net-web-api asp.net-web-api2
我们使用WebAPI公开当前的逻辑/业务层.根据我的理解,如果我们想要保护我们的自我免受线程饥饿的请求,我们应该制作Async WebAPI控制器,这样就可以弥补大量的并发请求.
我明白,由于底层服务/业务层是同步的,因此不会有性能提升.我们的目标是大量并发请求通过.
以下是我正在使用的代码:
public async Task<IHttpActionResult> Get()
{
var result = await Task.Run(() => Service.GetAllCompanies()); //existing business layer
return Ok(result);
}
Run Code Online (Sandbox Code Playgroud)
在任务中包装底层图层是很好的继续并实现目标.
我的理解是,如果你的await-ed方法的实现不是异步的,那么你并没有真正实现你的想法.如果您有CPU绑定的服务方法,那么您只需从请求处理池中释放一个线程,然后再启动一个新线程(从同一个池中,请注意)当您Task.Run();从该交换机中产生一些开销时, ASP.NET线程池仍然在做工作,所以你没有达到你想要的.
如果您的服务方法可以转换为纯(或大部分是纯粹的)异步代码,那么您将从自下而上的工作中受益.
参考:https://msdn.microsoft.com/en-us/magazine/dn802603.aspx
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |