我有一个 WebAPI 函数,它执行循环计算以查找单个数值。
在我的客户端 javascript 中,我为单个页面加载同时向该函数发出了大约 20 个请求。我已经通过 Chrome 的网络性能工具确认所有请求都是同时发出的,但是请求是按顺序接收响应的(最初的需要 0.2 秒,后面的需要 8 秒)所以服务器似乎是瓶颈.
我已尝试通过使其异步来优化我的代码,但我不确定我是否正确地做到了,或者它是否提高了性能。
[HttpGet]
public async Task<double> CalcResult(double First, double Second)
{
var result = await Task.Run(()=>LoopCalculationFunction(First,Second));
return result * 100;
}
这是否正确完成,有什么方法可以进一步优化此功能?
请您参考如下方法:
您应该将客户端 javascript 更改为批量调用,最好是单个请求。传递一个包含 first 和 second 值的数组,然后返回一个数组。
1) 每次往返都很慢,您可以通过单次往返使其更快。
2) 您将达到同时连接的浏览器每服务器(或每配置文件)限制。
3) 这不是 Task.Run 的正确用法,参见 http://blog.stephencleary.com/2013/11/taskrun-etiquette-examples-dont-use.html
4) 如果您的总连接时间过长,您应该转向轮询 API:发布计算请求,然后轮询进度和最终结果。
