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

Javascript同时调用异步端点

需要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");

}