C# 使用async for web api方法不会提高性能

C# 使用async for web api方法不会提高性能,c#,asynchronous,C#,Asynchronous,我正在尝试确定是否应该在web Api项目中使用Async。作为测试,我创建了一个调用长时间运行的远程服务并使用Async/Await的方法。然后我写了一个同步方法,它也做同样的事情 public async Task<JsonResult> ProcessAsync() { string uri = "http://mysrvc.azurewebsites.net"; //A service that sleeps for 10 seconds and returns "s

我正在尝试确定是否应该在web Api项目中使用Async。作为测试,我创建了一个调用长时间运行的远程服务并使用Async/Await的方法。然后我写了一个同步方法,它也做同样的事情

public async Task<JsonResult> ProcessAsync()
{
    string uri = "http://mysrvc.azurewebsites.net"; //A service that sleeps for 10 seconds and returns "success". Does not use Async or await
    var httpClient = new HttpClient();
    var response = await httpClient.GetAsync(uri);
    response.EnsureSuccessStatusCode();
    string content = await response.Content.ReadAsStringAsync();
    return Json(content, JsonRequestBehavior.AllowGet);
}

public JsonResult Process()
{
    string uri = "http://mysrvc.azurewebsites.net";
    var request = (HttpWebRequest)WebRequest.Create(uri);
    var response = (HttpWebResponse)request.GetResponse();

    var content = new StreamReader(response.GetResponseStream()).ReadToEnd();
    return Json(content, JsonRequestBehavior.AllowGet);
}
公共异步任务ProcessAsync()
{
字符串uri=”http://mysrvc.azurewebsites.net“;//休眠10秒并返回“success”的服务。不使用Async或wait
var httpClient=新的httpClient();
var response=wait-httpClient.GetAsync(uri);
response.EnsureSuccessStatusCode();
string content=wait response.content.ReadAsStringAsync();
返回Json(content,JsonRequestBehavior.AllowGet);
}
公共JsonResult进程()
{
字符串uri=”http://mysrvc.azurewebsites.net";
var request=(HttpWebRequest)WebRequest.Create(uri);
var response=(HttpWebResponse)request.GetResponse();
var content=newstreamreader(response.GetResponseStream()).ReadToEnd();
返回Json(content,JsonRequestBehavior.AllowGet);
}
在远程机器(Win7)上用IIS中的上述方法部署web api后,我在多个线程上分别调用了每个方法。它们按预期返回响应,但我认为这两种方法的性能没有差异。对于1-10个线程,两个线程都会在10秒内响应。对于11-20个线程,两个线程都需要持续20秒。
上面的异步代码是否错误?Async/Await是否提高了web应用程序的性能?

您希望获得什么性能增益?异步方法不能强制另一个web服务(“)运行得更快。异步方法允许更有效地使用web服务器资源-因此,异步web站点可以服务更多的客户端,因为它在I/O期间不会阻塞线程,但不会运行得“更快”“,即同步方法。继续Dennis所说的,由于回调的开销,异步方法通常比同步方法稍微慢一些,但它们在负载下的扩展性更好,这就是我们使用它们的原因。我想我的问题有点误导,我不期望单次调用就能获得性能提升,但是当我同时进行20次调用时,我希望异步方法比同步方法花费的时间更少。否则,使用异步的好处是什么?好处是如果您的系统在性能显著下降之前只能处理20个并发调用,那么异步版本可能在性能显著下降之前处理30个并发调用。每次通话的时间将保持不变,无论是1次通话还是20次通话。(另外,20真的很低,当谈到iis的限制时,通常您在并发调用的100到1000范围内)@GKMaganty:20调用算不了什么,特别是来自单客户端进程的调用。