AOPを使用して、アプリケーションプロセスで実行中の異なるスレッド間でデータを共有できますか?

StackOverflow https://stackoverflow.com/questions/1431463

  •  07-07-2019
  •  | 
  •  

質問

更新:どのコンテキストでAOPを使用する必要があるか明確ではありませんか?ロギングの目的であるセキュリティ(認証)にAOPを使用できるため、AOPを利用できる他のシナリオをいくつか提案してください。

AOPを使用して、アプリケーションプロセスで実行中の異なるスレッド間でデータを共有できますか?

役に立ちましたか?

解決

アスペクト指向プログラミングは、「クロスカット」を減らす必要がある場合に理想的です。コードベース内の機能。つまり、クラスに実装する必要がある共通のコード(ログ、セキュリティ)がありますが、その機能を基本クラスに抽象化することはできません。

したがって、AOPはこれらの小さな機能を実際に実行して、実行時またはコンパイル時に「クロスカット」が実行されるコードに埋め込みます。機能が存在します。

リソース

現在、AOPはC#に組み込まれていませんが、次のフレームワークでAOPを構築できます。

スレッドデータのAOP

一般に、AOPを使用してスレッド間でデータを共有することは、進むべき道ではありません。開発者がそれを行うために利用可能な他のテクニックがあります:

  • [ThreadStaticAttribute] この属性をフィールドに追加して、次のフィールドが複数のスレッドに固有であることを.NETランタイムに指示します

  • 同期(最も一般的な手法) Mutexes Semaphores ReaderWriter ロックおよび EventWaitHandles を使用して複数のスレッドからローカルまたはグローバルデータへのアクセスを同期します。 C#では、 lock ステートメントは Monitor クラスの構文糖衣であり、「ロック」に使用できます。単一のスレッドからオブジェクトへのアクセス。

他のヒント

AOPは舞台裏のスマートなコード生成(コンパイル時)/実行(実行時)であると考えるので、基本的にはほとんど何でもできます。従来のコード生成のすべての利点(およびそれ以上)があり、欠点(保守性など)はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top