我有一个需要存储的组件static
每个线程的值。它是一个通用组件,可以在许多场景中使用,而不仅仅是在 ASP.NET 中。
我想用[ThreadStatic]
属性来实现我的目标。假设它在 ASP.NET 场景中也能正常工作,因为我假设每个请求都在自己的线程中调用。
经过一番研究我发现这篇博文 http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx斯科特·汉塞尔曼 (Scott Hanselman) 说使用时要小心[ThreadStatic]
在 ASP.NET 中。
然而,大多数评论(在帖子下方)并不同意 Scott 所写的观点,他们说请求总是在一个线程中运行,并且该线程不会同时被另一个请求使用。我也是这么认为的,但很想听听这里的专家们的意见。
不,斯科特是对的:绝对是一个请求doesn't必须在整个持续时间内在单个线程上运行。 ASP.NET 是线程敏捷在这方面。只有少数几个点可以发生切换,但绝对可以can发生。 (我自己测试过。)
您可能想阅读这篇博文 http://piers7.blogspot.com/2005/11/threadstatic-callcontext-and_02.html and 了解更多详细信息。
基本上你应该找到一种不同的方式来捕获上下文。从您的角度来看,相关内容可能位于博客文章的末尾:
这是一个主要的 PITA,因为据我所知,它意味着 ASP.Net 中“ThreadStatic”行为的唯一持久性选项是使用 HttpContext。因此,对于您的业务对象,要么您陷入 if(HttpContext.Current!=null) 和 System.Web 引用(恶心),要么您必须为静态持久性提出某种提供程序模型,在访问任何这些单例之前需要进行设置。双讨厌。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)