新学 webapi 有的地方还不太理解 请指教一下怎么并发处理同一个 GET 请求?
比如下面的代码
同时打开 2 个页面 /api/values, /api/values/5 可以很好的处理并发
但是同时打开 2 个 /api/values 过 5 秒返回第一个页面 再过 5 秒返回第二个页面
请问怎么处理 2 个页面都尽快返回呢?
谢谢
// GET api/values
public IEnumerable<string> Get()
{
//模拟耗时操作
System.Threading.Thread.Sleep(5000);
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value" + id.ToString();
}
1
oh 2017-06-20 08:17:57 +08:00 via iPhone
看不太明白是要实现什么效果……
|
2
moemoe OP @oh 谢谢你的回复
我表达的不太清楚重新说一下`` 客户端 A,B 同时发送请求 我希望的效果是 服务器端并发处理 A,B 的请求 5 秒后同时向 A 和 B 返回结果 现在是 服务器先处理 A,5 秒后向 A 返回结果 然后再处理 B,5 秒后(从发送请求总共经过 10 秒)向 B 返回结果 |
3
moemoe OP 我找到了我的问题
https://msdn.microsoft.com/zh-cn/library/ms178581(v=vs.100).aspx ``` 并发请求和会话状态 对 ASP.NET 会话状态的访问专属于每个会话,这意味着如果两个不同的用户同时发送请求,则会同时授予对每个单独会话的访问。但是,如果这两个并发请求是针对同一会话的(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。第二个请求将只在第一个请求完成之后执行。(如果由于第一个请求超过了锁定超时时间而导致对会话信息的独占锁定被释放,则第二个会话也可获得访问权。)如果将 @ Page 指令中的 EnableSessionState 值设置为 ReadOnly,则对只读会话信息的请求不会导致对会话数据的独占锁定。但是,对会话数据的只读请求可能仍需等到解除由会话数据的读写请求设置的锁定。 ``` |