同时请求两个ashx,为什么总是在最慢那个ashx完成时一起返回?
ASP.NET项目,有两个类A和B均实现自IHttpHandler,A正常耗时要3秒,B耗时在毫秒级,在客户端分别用两个线程请求A和B,通过fiddler抓包观察,请求时间几乎同步,按理说AB应该互不干涉,谁先完成就返回,即B很快返回,A大概3秒后返回,但观察下来几乎都是3秒后一起返回,似乎B在等A,极少的情况下才会出现B先返回,但无论同时返回还是先后返回,A和B并不在同一线程执行(通过往响应头写线程id证实),这是为什么?如何让它们之间不等待?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
我想我知道了,AB还同时实现了IRequiresSessionState,不实现该接口就不会阻塞。看来Session这东西对并发有影响,要慎用。
asp.net 中Session实现了读写锁。
你的问题是a.aspx中实现了写锁,阻塞了b.aspx页面对session的访问。
如果想同时访问,请设置a.aspx如下
<%@ Page EnableSessionState="ReadOnly"%>,同样,b.aspx中也要这样设置,因为读锁可以阻塞写锁。
这时b.aspx可以正常访问了。
同样,如果是要自定义实现IHttpHandler,需要在实现IRequiresSessionState和IReadOnlySessionState两个标记接口。
摘自MSDN
https://social.msdn.microsoft...
》更多...《