7

私が使用System.Web.HttpContext.Currentしている Web アプリケーションでは、現在のヒット コンテキストを表していますstatic。メンバーであることに気付くまで、どこからでもどのようにアクセスできるのか疑問に思っていました。静的メンバーでありながら、2 つのリクエストがほぼ同時に受信された場合に値を保持する方法。次のように:

#Req1----> | set the value of the static field to req1
#Req2----> | set the value of the static field to req2
#Req1      | use that static its supposed to be req2 while its req1

私は何かを誤解しましたか、それとも何かトリックがありますか?

4

1 に答える 1

5

これは非常に賢い質問です!

HttpContext.Currentスレッドローカル変数として実装されています。実際には、を使用して実装されてLogicalCallContextいますが、それはスレッドローカルのように動作します。

次のように考えてください。

[ThreadLocal]
public static HttpContext Current;

はい、これは、プライマリ リクエスト スレッドのみがアクセスできることを意味します。開始する追加のスレッドでは null になります。

于 2013-03-23T12:59:55.447 に答える