asp.net mvc3请求线程关联

use*_*045 10 threadstatic asp.net-mvc-3

我在我的asp.net mvc3应用程序(在IIS7上)使用专有的IoC机制,在[ThreadStatic]字段中保存状态,因此依赖于假设HttpApplication.BeginRequest,HttpApplication.EndRequest和整个同步执行(单个)他们所涉及的请求是在同一个线程上执行的.

这个假设是否正确?

Dar*_*rov 9

这个假设是否正确?

不,这个假设是不正确的,并且有证据证明这一点.ASP.NET中唯一可靠的每个请求存储机制是HttpContext.Items.

切勿使用[ThreadStatic]字段在ASP.NET应用程序中存储每个请求值.例如,如果你有一个异步控制器,你很可能让引擎从线程池中抽取一个请求开始提供请求,然后依赖于IOCP(I/O完成端口)启动异步操作,最后从池完成请求.所以你可以有2个不同的线程服务相同的HTTP请求.

绝对不要依赖于HTTP请求将由同一个线程提供的事实.

对于同步请求,在某些情况下可能会这样,但请记住,这只是一个实现细节.这可能会在没有任何通知的情况下从一个.NET版本发生变化.你永远不应该依赖它,永远不要[ThreadStatic]在ASP.NET中使用.这可能会让你非常伤心.

  • 哇我对这个答案感到非常震惊,我真的相信ASP.NET MVC正在处理每个线程的每个请求.MVC 5仍然如此吗?如果不为每个线程处理请求,您如何解释可以为多语言应用程序设置Thread.CurrentThread.CurrentCulture? (2认同)