2008年1月7日月曜日

ILogicalThreadAffinativeとThread Local Storage

TLSつまりThread Local Storageは便利で、コンテキスト情報を持たせるときに活用しようとずっと考えていました。すでにある例としてはIPrincipalでしょうか。Threadにプリンシパルを持たせることで、実行に必要な権限があるかをいつでもテストできます。
ですがこれ、Thread Localということは当然Threadをまたぐことができません。.NETでは簡単に非同期処理などを利用でき複数Threadにまたがってしまう。そうなったときTLSは使えません。

そこで自分の生成した子スレッドにのみ引き継がれる都合のいいTLSはないかと.NETクラスライブラリを調べていましたがなかなか出合えませんでした。
が、やはり根気よく調べればありました。それがILogicalThreadAffinativeです。このinterfaceはメンバがありません。ただ継承すればそれだけでTLSの内容が子スレッドにも引き継がれるようになります。
日本語圏でググったところ、まだあまり使われていないようですが、これはかなり使えます。

0 件のコメント: