HttpContext.Current如何在multithreading环境中工作?

所以我想知道asp.net是如何确定范围静态属性的,当(据我所知)asp.net是multithreading的。

  • 一种理论认为,ASP.NET人员为每个请求维护一个不同的appdomain …但这似乎不可行。
  • 另一种理论认为.Current方法查看当前的Thread,然后使用它来查找某些哈希表(或其他静态存储机制)中的http上下文。

无论哪种方式,这是一种看似非常有用的技术……我想利用它,但绝对不想调试共享状态错误: – /

Marc所说的是最容易被你追求的东西,但是ASP.NET实际上比ThreadStatic更复杂,因为单个请求实际上可以由多个线程处理..我相信ASP.NET的用途是表示执行线程明确地被告知切换上下文,当然主机环境正在调度线程,它有httpcontext需要执行的上下文,所以它找到一个线程,告诉线程它应该运行哪个上下文..然后发送它在途中。

所以解决方案真的不是那么令人遗憾,因为线程静止更简单,95%的时间可能都适合。

它不是每个请求的AppDomain 。 如果要使用特定于线程的状态,请尝试:

 [ThreadStatic] private static int foo; public static int Foo {get {return foo;} set {foo = value;}} 

每个线程现在都有自己的Foo值(或者更确切地说:’foo’)。

不是轻易使用的 – 它确实有成本,但它是在每个线程的基础上共享状态的有效方式。 我曾经使用过一次,也许两次 – 而且我写了很多C#。 不要过度使用它……

特别要注意初始化问题(即忘记这样做),并记住要自己清理等等。如果你使用任何异步代码,要非常小心,因为任何回调/工人/等都会有不同的状态。