Con*_*eak 9 c# asp.net asp.net-mvc asynchronous asp.net-mvc-4
我已经在这篇MSDN文章中使用ASP.NET MVC 4中的使用异步方法设置了示例,并做了一些基准测试以了解我的想法.
我设置了2个控制器Sync,Async并使用加载器工具进行了基准测试.加载器工具只发送50-60个常量请求一分钟.每个控制器调用相同的Web服务3次.每个代码如下:
public ActionResult Sync()
{
var g1 = GetGizmos("url1");
var g2 = GetGizmos("url2");
var g3 = GetGizmos("url3");
return Content("");
}
public object GetGizmos(string uri)
{
using (WebClient webClient = new WebClient())
{
return JsonConvert.DeserializeObject(
webClient.DownloadString(uri)
);
}
}
Run Code Online (Sandbox Code Playgroud)

public async Task<ActionResult> Async()
{
var g1 = GetGizmosAsync("url1");
var g2 = GetGizmosAsync("url2");
var g3 = GetGizmosAsync("url3");
var a1 = await g1;
var a2 = await g2;
var a3 = await g3;
return Content("");
}
public async Task<object> GetGizmosAsync(string uri)
{
using (HttpClient httpClient = new HttpClient())
{
var response = await httpClient.GetAsync(uri);
return (await response.Content.ReadAsAsync<object>());
}
}
Run Code Online (Sandbox Code Playgroud)

第一个问题,有没有人知道为什么Async需要更长时间,运行更少并导致超时,而同步版本不是?我认为使用Async会更快,没有超时等等.只是看起来不对,我在这里做错了什么?可以做些什么来改善/修复它?
第二个问题,一般来说,使用WebRequests有没有办法加快速度?我已经设置了以下内容,global.asax但仍不确定用法是否正确:
System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
Run Code Online (Sandbox Code Playgroud)
此外,任何其他建议,以帮助加快执行这些类型的品尝的应用程序将是非常有帮助的.
webClient.DownloadString(uri)
Run Code Online (Sandbox Code Playgroud)
到
var response = await httpClient.GetAsync(uri);
return (await response.Content.ReadAsAsync<object>());
Run Code Online (Sandbox Code Playgroud)
也许你可以尝试
webclient.DownloadStringAsync(uri)
Run Code Online (Sandbox Code Playgroud)
你可以优化你的异步代码
await Task.Run(() => {
// just run your sync code here
var g1 = GetGizmos("url1");
var g2 = GetGizmos("url2");
var g3 = GetGizmos("url3");
return Content("");
});
Run Code Online (Sandbox Code Playgroud)
这里有一个异步让出点就足够了。
有关异步的详细信息,请参阅此答案: Do you have to put Task.Run in a method to make it async?
| 归档时间: |
|
| 查看次数: |
2165 次 |
| 最近记录: |