ASP.NET MVC2にいくつかのaysncコントローラを書き込んでいるうちに、私はAsyncManager.Sync
に電話しなければならなかった状況に遭遇しました。スレッドとデータを関連付ける:どうしますか?
私がHttpContext.Current
を検索すると、何が起こっているのですか? ASP.NETはどのように私が後にHttpContext
を知っていますか?現在のコンテキストはどのようにこのスレッドに関連付けられており、どのように取得されていますか?
ASP.NET MVC2にいくつかのaysncコントローラを書き込んでいるうちに、私はAsyncManager.Sync
に電話しなければならなかった状況に遭遇しました。スレッドとデータを関連付ける:どうしますか?
私がHttpContext.Current
を検索すると、何が起こっているのですか? ASP.NETはどのように私が後にHttpContext
を知っていますか?現在のコンテキストはどのようにこのスレッドに関連付けられており、どのように取得されていますか?
スレッドスコープのストレージが使用されている場合、これはThread Local Storageと呼ばれます。
このメカニズムでは、データをスレッドでアフィニティ化することができます。つまり、データを割り当てるスレッドのみがデータを参照します。これは、HttpContext.CurrentやTransactionScopeなどのいわゆるアンビエントプログラミングモデルを作成する場合に便利です。このメカニズムは、例えば、メソッドパラメータを介してデータを「混雑させる」ことなく、実行中のスレッド上でいつでもデータにアクセスできるようにする。それはある種の文脈\直交問題のためのエレガントな解法です。
ThreadStaticAttributeとThread.SetData \ GetDataを含むTLSの使用方法はいくつかあります。
あなたの答えをありがとう。あなたが私にキーワード(スレッドローカルストレージ)を与えた後、私はJoseph Albahariのこれに関するかなりまともな記事を見つけました:http://www.albahari.com/threading/part3.aspx#_Thread-Local_Storage – spender
@彼の優れた本からの抜粋です。私はそれを含めるつもりでしたが、セクションはリンクされておらず、ページの一番下にありました。彼のスレッドのものはとても良いです。 –
うーん、十分にここは私の棚に座っている。他の発見されていない宝石がどれほど待っているのだろうか。私はそれをやめています。 – spender