Session导致Action不异步

啊。回想起来,真是一个大坑啊,最近博主在做一个上传文件实时显示进度条的功能。博主的思路是在上传的时候用一个Task一秒一次向Redis中插入当前的上传进度 ,上传视频后再轮询上传进度实时显示在客户端。

然后我就开始敲代码了,一起看起来都没什么问题。运行的时候一下就懵比了,发现轮询的请求要等到上传的请求返回才可以进入到action中。也就是说我的请求不是异步的了。变成了同步 what??

后来经过一系列排查,原来是session的问题,因为我存了当前的登陆状态,当cookie中用同一个sessionId去请求后台的时候,是lock住的,必须上一个请求返回后才可以下一个请求才会进来,这简直就是在搞事,假如某个action的执行过程特别长,其它的请求只能排在后面,这无疑是特别影响性能的。

那么为什么会是这种设计呢?因为微软希望session是线程安全的,不会有两个线程同时对session内的数据进行修改的情况

那我的进度条功能就不能实现了? 当然不是,微软贴心的为我们留出了选择,我们可以在controller中加注解[SessionState(SessionStateBehavior.ReadOnly)] 也是说,哎呀,老哥,放心吧,我不瞎整,保证这个controller只读session不进行修改,你就让我的小伙伴一起来玩耍吧。这时我们又可以愉快的继续下去了。有人会问了,那我贴了这个注解,但是我又修改了session呢,遗憾的说,老哥控制的还是很严格的,当你做了保证后,你对session的所有修改都是无效的。(Ps:其实另有方法哦)

SessionStateBehavior还有其它的选项

Default

Disabled

Required

最新文章

  1. Entity Framework 6连接Postgresql、SQLite、LocalDB的注意事项和配置文件
  2. MySQL5.6 PERFORMANCE_SCHEMA 说明
  3. BFC的深入理解
  4. Autocad 常用命令
  5. apache win openssl
  6. MyBatis<forEach/>如何遍历Map参数里的值
  7. Sql省市三级联动一张表
  8. STL 二分查找三兄弟(lower_bound(),upper_bound(),binary_search())
  9. 1688: [Usaco2005 Open]Disease Manangement 疾病管理
  10. 【JAVAWEB学习笔记】网上商城实战:环境搭建和完成用户模块
  11. poj 3177-3352边双联通
  12. nginx的基础应用(续)
  13. Redis总结(七)Redis运维常用命令
  14. MYSQL数据库学习十七 日志管理
  15. javascript DOM编程艺术(检测与性能优化)
  16. rm: cannot remove ‘overlay/’: Device or resource busy
  17. 深度学习框架PyTorch一书的学习-第三章-Tensor和autograd-2-autograd
  18. Armstrong公理
  19. 第四篇:记录相关操作 SQL逻辑查询语句执行顺序
  20. [UE4]计算AimOffset偏移动画的角度

热门文章

  1. Storm基础
  2. 权重最小生成树的思想与Kruskal算法
  3. centos7搭建自己的yum源
  4. WebAPi的可视化输出模式(RabbitMQ、消息补偿相关)——所有webapi似乎都缺失的一个功能
  5. Ubuntu 网络参数设置
  6. MBTI-性格测试
  7. Hibernate 延迟加载和立即加载
  8. BZOJ 1036: [ZJOI2008]树的统计Count [树链剖分]【学习笔记】
  9. swift的后台编码路
  10. iPhone添加邮箱