Javascript同时调用异步端点
本文关键字:异步 端点 调用 Javascript | 更新日期: 2023-09-27 18:03:57
我正在尝试实现异步端点。. NET c#)以便用javascript/ajax调用它们。基本思想是将请求(同时>2个)拆分到多个线程中,这样用户就可以从每个调用中单独获得响应,并且每个请求的执行时间对应于实际的计算(或等待)时间。
public async Task<ActionResult> Call1()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/3"); // Takes 3 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
public async Task<ActionResult> Call2()
{
var client = new HttpClient();
var res = await client.GetAsync("http://httpbin.org/delay/2"); // Takes 2 seconds
return View("~/Views/Dashboard/Test.cshtml");
}
假设浏览器同时请求方法Call1和Call2。现在大约需要5秒,直到两个呼叫都结束(Call1(3秒)+ Call2(2秒))。据我所知,这意味着。net同步处理它们,并在处理Call2之前等待Call1结束,尽管它们是用异步方法同时调用的。那不是我想要的。
请求次数
我想用多个方法实现相同的结果,如下面的方法所示,正确地只需要3秒,尽管两个服务(3sec + 2sec)都被调用:
public async Task<ActionResult> Delay()
{
var client1 = new HttpClient();
Task<HttpResponseMessage> async1 = client1.GetAsync("http://httpbin.org/delay/3");
var client2 = new HttpClient();
Task<HttpResponseMessage> async2 = client2.GetAsync("http://httpbin.org/delay/2");
HttpResponseMessage result1 = await async1;
HttpResponseMessage result2 = await async2;
return View("~/Views/Dashboard/Test.cshtml");
}
是否有可能不阻塞其他线程并同时处理多个方法?
谢谢你的帮助。vill
需要5秒的原因是因为您先等待result1,然后等待result2。尝试修改代码以创建任务列表,然后使用Task.WhenAll
等待所有任务。在这里阅读更多关于Task.WhenAll
的信息
public async Task<ActionResult> Delay()
{
var tasks= new List<Task>();
var client1 = new HttpClient();
tasks.Add(client1.GetAsync("http://httpbin.org/delay/3"));
var client2 = new HttpClient();
tasks.Add(client2.GetAsync("http://httpbin.org/delay/3"));
await Task.WhenAll(tasks);
return View("~/Views/Dashboard/Test.cshtml");
}