在共享函数线程安全中访问httpcontext?

时间:2012-01-05 22:31:29

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

我有一个问题,如果在共享函数中访问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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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