私は.NETライブラリで利用できる特別なデータ構造を書いています。このデータ構造の特徴の1つは、スレッドセーフであるということです。ただし、1つのスレッドのみがデータを書き込み、それからのデータ(リーダスレッドとライタスレッドは異なる可能性があります)。.NETでクロススレッドアクセスを検出する方法(スレッドアフィニティを実施する)?
問題は、すべての読み取り操作が同じスレッドで実行されるように強制することができますか?
私の解決策は、System.Threading.Thread.ManagedThreadIDをキャプチャして、最初の読み取り時にプライベートメンバーに格納します。次に、後続の読み取りでManagedThreadIDを保存されたものと比較し、異なる場合は例外をスローします。
これで十分ですか、これを行うには信頼性の高いメカニズムがあります。
注:このライブラリはのWindows.Formsコンテキストなしで使用可能であるという要件があります。..
Thanks Jared。ちょうど興味があります、あなたは@ sixlettervariablesの答えが良い/悪くなる理由を見ますか? –
@Miky D、私はそれが責任を混同しているので、それが悪いと言っている唯一の理由です。無効なクロススレッドアクセスをチェックするための別のクラスを持つことは、一貫した再利用可能なエクスペリエンスを提供します。それは非常に少量のコードだけど、あなたが実際にはめ込むことができる唯一のものはエラーメッセージなので、IMHOはそれほど大したことではありません。 – JaredPar
JaredParはクラスを使用している限り、私はManaged IDを使用していないことに同意します。しかし、はい、+1ロジックを扱う別のクラスを使用します。 – user7116