2012-01-05 117 views
2

如果在共享函数中访问httpcontext而不传入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

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

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

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

+0

Thanks @RickNZ - 这些后台工作线程可以从哪里发起? IIS? – KorsG 2012-01-06 17:09:04

+1

如果将'HttpContext'存储到一个静态变量中,那么它对IIS线程可见(不好)。后台线程是您直接使用'new Thread()'创建的线程或通过某种类型的ThreadPool间接使用的线程。 – RickNZ 2012-01-06 23:43:22