V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
moemoe
V2EX  ›  .NET

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

  •  
  •   moemoe · 2017-06-20 02:51:25 +08:00 · 7114 次点击
    这是一个创建于 2714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    新学 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();
    }
    
    oh
        1
    oh  
       2017-06-20 08:17:57 +08:00 via iPhone
    看不太明白是要实现什么效果……
    moemoe
        2
    moemoe  
    OP
       2017-06-20 13:09:42 +08:00
    @oh 谢谢你的回复
    我表达的不太清楚重新说一下``

    客户端 A,B 同时发送请求
    我希望的效果是 服务器端并发处理 A,B 的请求 5 秒后同时向 A 和 B 返回结果
    现在是 服务器先处理 A,5 秒后向 A 返回结果 然后再处理 B,5 秒后(从发送请求总共经过 10 秒)向 B 返回结果
    moemoe
        3
    moemoe  
    OP
       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,则对只读会话信息的请求不会导致对会话数据的独占锁定。但是,对会话数据的只读请求可能仍需等到解除由会话数据的读写请求设置的锁定。
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2676 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:46 · PVG 18:46 · LAX 02:46 · JFK 05:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.