代码之家  ›  专栏  ›  技术社区  ›  Joel Martinez

HttpContext.Current如何在多线程环境中工作?

  •  12
  • Joel Martinez  · 技术社区  · 15 年前

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

    2 回复  |  直到 15 年前
        1
  •  8
  •   meandmycode    15 年前

    Marc所说的最容易理解,但是ASP.NET实际上比ThreadStatic所说的要复杂一些,因为单个请求实际上可以由多个线程处理。。我认为ASP.NET的作用是,执行线程被明确地告知要切换上下文,当然宿主环境正在调度线程,它有httpcontext需要执行的上下文,因此它会找到一个线程,告诉线程应该在哪个上下文中运行。。然后把它送走。

    因此,解决方案并不是那么令人遗憾,因为threadstatic更简单,可能需要95%的时间。

        2
  •  15
  •   Marc Gravell    15 年前

    AppDomain 按要求。如果要使用特定于线程的状态,请尝试:

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

    Foo (或者更确切地说:“foo”)。

    这是 轻描淡写地使用-它确实有成本,但却是基于每个线程共享状态的有效方法。我用过一次,也许两次——我写过很多C。不要过度使用它。。。

    特别是,要注意初始化问题(即忘记进行初始化),并记住在自己完成后进行清理等 非常