asp.net mvc3请求线程关联

时间:2012-01-01 21:07:42

标签: asp.net-mvc-3 threadstatic

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

这个假设是否正确?

1 个答案:

答案 0 :(得分:9)

  

这个假设是否正确?

不,这个假设是not correct,而evidence就是{{3}}。 ASP.NET中唯一可靠的每个请求存储机制是HttpContext.Items

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

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

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