use*_*045 10 threadstatic asp.net-mvc-3
我在我的asp.net mvc3应用程序(在IIS7上)使用专有的IoC机制,在[ThreadStatic]字段中保存状态,因此依赖于假设HttpApplication.BeginRequest,HttpApplication.EndRequest和整个同步执行(单个)他们所涉及的请求是在同一个线程上执行的.
这个假设是否正确?
这个假设是否正确?
不,这个假设是不正确的,并且有证据证明这一点.ASP.NET中唯一可靠的每个请求存储机制是HttpContext.Items.
切勿使用[ThreadStatic]字段在ASP.NET应用程序中存储每个请求值.例如,如果你有一个异步控制器,你很可能让引擎从线程池中抽取一个请求开始提供请求,然后依赖于IOCP(I/O完成端口)启动异步操作,最后从池完成请求.所以你可以有2个不同的线程服务相同的HTTP请求.
绝对不要依赖于HTTP请求将由同一个线程提供的事实.
对于同步请求,在某些情况下可能会这样,但请记住,这只是一个实现细节.这可能会在没有任何通知的情况下从一个.NET版本发生变化.你永远不应该依赖它,永远不要[ThreadStatic]在ASP.NET中使用.这可能会让你非常伤心.
| 归档时间: |
|
| 查看次数: |
1662 次 |
| 最近记录: |