关于 c#webapi 怎么并发处理同一个 GET 请求?

2017-06-20 02:51:25 +08:00
 moemoe

新学 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();
}
7021 次点击
所在节点    .NET
3 条回复
oh
2017-06-20 08:17:57 +08:00
看不太明白是要实现什么效果……
moemoe
2017-06-20 13:09:42 +08:00
@oh 谢谢你的回复
我表达的不太清楚重新说一下``

客户端 A,B 同时发送请求
我希望的效果是 服务器端并发处理 A,B 的请求 5 秒后同时向 A 和 B 返回结果
现在是 服务器先处理 A,5 秒后向 A 返回结果 然后再处理 B,5 秒后(从发送请求总共经过 10 秒)向 B 返回结果
moemoe
2017-06-21 02:01:17 +08:00
我找到了我的问题
https://msdn.microsoft.com/zh-cn/library/ms178581(v=vs.100).aspx

```
并发请求和会话状态
ASP.NET 会话状态的访问专属于每个会话,这意味着如果两个不同的用户同时发送请求,则会同时授予对每个单独会话的访问。但是,如果这两个并发请求是针对同一会话的(通过使用相同的 SessionID 值),则第一个请求将获得对会话信息的独占访问权。第二个请求将只在第一个请求完成之后执行。(如果由于第一个请求超过了锁定超时时间而导致对会话信息的独占锁定被释放,则第二个会话也可获得访问权。)如果将 @ Page 指令中的 EnableSessionState 值设置为 ReadOnly,则对只读会话信息的请求不会导致对会话数据的独占锁定。但是,对会话数据的只读请求可能仍需等到解除由会话数据的读写请求设置的锁定。
```

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/369687

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX