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


EDIT
私は、私はまた、いくつかの良い答えを持っている私の最初の研究で逃したSOポストを見つけました。
興味のあるもの: HttpContext.Current.Response inside a static method

答えて

2

問題の2つの機能は、スレッドの安全性に関して同等です。

HttpContextはスレッドセーフではありませんが、HttpContext.Currentへの参照はスレッドセーフです。通常、要求ごとのHttpContextオブジェクトのスレッド安全性の欠如は問題ではありません。なぜなら、一度に1つのスレッドのみが特定の要求を処理するからです。

しかし、HttpContext.Currentを参照しているバックグラウンドワーカースレッドなどがある場合は、問題になる可能性があります。

+0

ありがとう@RickNZ - これらのバックグラウンドワーカースレッドはどこから発生しましたか? IIS? – KorsG

+1

'HttpContext'を静的変数に格納すると、IISスレッドから見えるようになります(うまくいかない)。バックグラウンドスレッドは、 'new Thread()'で直接作成するものや、ある種のThreadPool経由で間接的に使うものです。 – RickNZ

関連する問題