如何HttpContext.Current工作在多线程环境中?(How does HttpConte

2019-07-23 04:44发布

所以我在想asp.net究竟怎么能范围静态属性,当(据我所知)asp.net是多线程的。

  • 有一种理论去了ASP.NET家伙保持为每个请求一个不同的AppDomain ......但似乎并不可行。
  • 另一种理论是,该.Current方法着眼于当前的主题,然后使用该来查找HTTP上下文中的一些哈希表(或其他静态存储机制)。

无论哪种方式,它似乎非常有用的技术。我想利用它,但绝对不希望被调试共享状态的错误: - /

Answer 1:

什么马克说是最简单最有可能为你所追求的,然而ASP.NET是个有点复杂得多,有什么说什么ThreadStatic呢,因为单个的请求实际上可以被多个线程处理..什么,我相信情况与ASP.NET是正在执行的线程明确地被告知要切换上下文,当然托管环境是调度线程,它有它的HttpContext需要执行的背景下,所以它找到一个线程,告诉这方面,应该运行在线程..然后将其发送开始了它的方式。

因此,解决办法真的是不是所有的漂亮可悲的是,那里的threadstatic要简单得多,可能需要适合的95%的时间。



Answer 2:

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

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

每个线程现在都有自己的价值Foo (或者说:“富”)。

这是轻易使用-它也有成本,而且是在每个线程的基础上共享状态的有效方法。 我用这一次,也许两次 - 我已经写了很多C#。 不要过度使用它...

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



文章来源: How does HttpContext.Current work in a multi-threaded environment?