ASP.NET中的ThreadStaticAttribute

gsh*_*arp 21 .net c# asp.net multithreading threadstatic

我有一个组件需要static在每个线程之前存储值.它是一个通用组件,可以在许多场景中使用,而不仅仅在ASP.NET中使用.

我正在考虑使用该[ThreadStatic]属性来实现我的目标.假设它在ASP.NET场景中也能正常工作,因为我假设每个Request都在自己的线程中调用.

经过一些研究后,我发现Scott Hanselman 撰写的这篇博客文章[ThreadStatic]在ASP.NET中使用时要小心.

然而,大多数评论(在帖子下面)都不同意斯科特写的,说请求总是在一个线程中运行,并且该线程不会被另一个请求同时使用.这也是我所相信的,但我很乐意在这里对你的专家有一些看法.

Jon*_*eet 30

不,Scott是对的:一个请求肯定不需要在整个持续时间内在单个线程上运行.在这方面,ASP.NET是线程敏捷的.交换机只有几个点可以发生,但肯定发生.(我已经为自己测试了.)

您可能希望阅读此博客文章此Spring论坛主题以获取更多详细信息.

基本上你应该找到一种捕获上下文的不同方法.您的观点中的相关位可能在博客文章的末尾:

这是一个主要的PITA,因为据我所知,这意味着ASP.Net中'ThreadStatic'行为的唯一持久性选项是使用HttpContext.因此,对于您的业务对象,您要么遇到if(HttpContext.Current!= null)和System.Web引用(yuck),要么您必须为静态持久性提供某种提供者模型,这将需要在访问任何这些单例之前进行设置.双翘.