MVC 4 ApiController和异步并发

时间:2012-10-08 06:34:21

标签: asp.net .net asp.net-mvc-4 asp.net-web-api async-await

我在ApiController中使用异步方法,这种行为让我感到惊讶。我调用以下方法:

// GET api/values/{id}
public async Task<object> Get(int id)
{
    var received = DateTime.Now;
    await Task.Delay(10000);
    var finished = DateTime.Now;
    return new { id, received, finished };
}

从四个浏览器窗口按顺序排列以下网址,每个网址之间的延迟时间约为1秒:

http://localhost:55571/api/values/1
http://localhost:55571/api/values/2
http://localhost:55571/api/values/3
http://localhost:55571/api/values/2

第一个URL按预期返回,在我启动它后十秒,之后很快就会出现第二个和第三个URL。但是,第二个URL与第二个URL相同,在第二个URL返回后返回10秒。

这告诉我,浏览器和我的代码之间的某些内容是将请求序列化到相同的URL,或同一组参数或其他东西(以及POST,PUT等等)。我不想对此进行逆向工程,而是要问......

这种行为是否记录在某处?

编辑:我试图抓住this straw,但无济于事。

编辑:根据评论的要求,时间(大致)如下:

 0 s: GET …/values/1
 1 s: GET …/values/2
 2 s: GET …/values/3
 3 s: GET …/values/2 (2nd instance)
10 s: GOT …/values/1
11 s: GOT …/values/2
12 s: GOT …/values/3
21 s: GOT …/values/2 (2nd instance)

1 个答案:

答案 0 :(得分:2)

浏览器会自动限制他们与主机的连接数量。 RFC 2616(HTTP 1.1)建议限制两个持久连接;您的浏览器似乎使用了三个限制。