1

WidgetProcessor というサービス (Web サービスではなくサービス層オブジェクト) があり、そのサービスに Process() という名前のメソッドが 1 つしかない場合、そのメソッド内で別のサービス (サービス層オブジェクト) を使用します。このサービスを WidgetValidator と呼びましょう。これには、Parallel.ForEach 内から呼び出されるメソッド Validate() があります。

1) Validate メソッドで何もしない場合、複数の計算を実行する場合、スレッドセーフではないと想定しています...正しいですか?
2) WidgetValidator オブジェクトを挿入する適切な方法は何ですか。コンストラクターを介して WidgetValidator を注入し、それをクラス レベルのプライベート変数に割り当てると、Parallel.ForEach 内で WidgetValidator を新しく作成する場合と比較して、スレッド セーフ性が低下するようです。しかし、これについての何かが私に「コードの匂い」を考えさせます! Validate メソッド内のコードにロックを適用するだけでよいでしょうか。

注: IoC コンテナーとして Ninject を使用しています。

4

1 に答える 1

1

Validator が共有状態を変更しているかどうかによって異なります。そうでない場合は、同じインスタンスを再利用できます。共有変数を変更している場合は、同時に呼び出すことはできません。

于 2012-05-03T18:25:07.913 に答える