【问题标题】:Accessing httpcontext in shared function thread safe?在共享函数线程中访问 httpcontext 安全吗?
【发布时间】:2012-01-05 22:31:29
【问题描述】:

如果在共享函数中访问 httpcontext,而不将 httpcontext 作为参数传递是线程安全的,我无法理解?

我的问题是:util 类中的 2 个函数是否同样线程安全?

Class foo
    Sub main()
       Dim qs1 = util.getQS(HttpContext.Current)
       Dim qs2 = util.getQS()
    End Sub
End Class

Class util
    Shared Function getQS(hc As HttpContext) As String
        Return hc.Request.QueryString.ToString
    End Function
    Shared Function getQS() As String
        Return HttpContext.Current.Request.QueryString.ToString
    End Function
End Class


编辑
我发现了一个我在最初研究中错过的 SO 帖子,其中也有一些很好的答案。
对于有兴趣的人: HttpContext.Current.Response inside a static method

【问题讨论】:

    标签: asp.net vb.net thread-safety


    【解决方案1】:

    问题中的两个函数在线程安全方面是等价的。

    虽然HttpContext 不是线程安全的,但获取对HttpContext.Current 的引用是线程安全的。通常,每个请求 HttpContext 对象缺乏线程安全不是问题,因为一次只有一个线程处理给定请求。

    但是,如果您有引用 HttpContext.Current 的后台工作线程等,这可能会成为一个问题。

    【讨论】:

    • 谢谢@RickNZ - 这些后台工作线程来自哪里? IIS ?
    • 如果您将HttpContext 存储到静态变量中,那么它可以对IIS 线程可见(不好)。后台线程是您直接使用 new Thread() 创建或通过某种 ThreadPool 间接使用的线程。
    【解决方案2】:

    简短的回答是否定的。有关详细信息,请参阅此问题及其答案:Using an HTTPContext across threads

    【讨论】:

      猜你喜欢
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2011-08-02
      • 2021-08-12
      相关资源
      最近更新 更多