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