2012-01-05 48 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

相關問題