我在我的asp.net mvc3应用程序(在IIS7上)使用专有的IoC机制,它在[ThreadStatic]字段中保存状态,因此依赖于HttpApplication.BeginRequest,HttpApplication.EndRequest和整个同步执行的假设(单个)与之相关的请求在同一个线程上执行。
这个假设是否正确?
答案 0 :(得分:9)
这个假设是否正确?
不,这个假设是not correct,而evidence就是{{3}}。 ASP.NET中唯一可靠的每个请求存储机制是HttpContext.Items
。
永远不要使用[ThreadStatic]
字段在ASP.NET应用程序中存储每个请求值。例如,如果你有一个异步控制器,你很可能让引擎从线程池中抽取一个请求开始提供请求,然后依赖于IOCP(I / O完成端口)启动异步操作,最后从池完成请求。所以你可以有2个不同的线程为同一个HTTP请求提供服务。
绝对不要依赖于HTTP请求将由同一个线程提供的事实。
在某些情况下,对于同步请求可能会这样,但请记住,这只是一个实现细节。这可能会在没有任何通知的情况下从一个.NET版本发生变化。你永远不应该依赖它,永远不要在ASP.NET中使用[ThreadStatic]
。这可能会让你非常伤心。