質問

基本的な前提は次のとおりです。

  1. Wcfは、通常のThreadPoolスレッド(QueueUserWorkItem)ではなくIOCPスレッド(UnsafeQueueNativeOverlapped)でサービス操作メソッドを実行します。

  2. I / Oのブロックは、一方向のサービス操作メソッドの内部で行うべきではありません

  3. I / Oのブロックは、通常のThreadPoolスレッド内で行われるべきではありません

最良の戦略は、非同期呼び出しをチェーンすることだと思います。そのため、一方向サービス操作にメッセージを受信した場合、dbに対して非同期呼び出しを行い、それが完了したら、次の非同期db呼び出しなどを行い、最後にwcfコールバックを介して応答します...

ただし、すべてのデータベース呼び出しを非同期で実行するのは困難です。上記のルール2と3を破ることに頼りましたが、結局はThreadPoolを枯渇させると思うので、私はそれが好きではありません。より良い戦略はありますか?

Jon SkeetのCustomThreadPoolの使用を検討しましたが、それが答えであるかどうかはわかりません。

役に立ちましたか?

解決

ThreadPoolが実行する同期I / O呼び出しをキューに入れることにより、ルール3を破ることをお勧めします。サービスメソッドはまだすぐに戻りますが、作業は最終的にバックグラウンドで行われ、おそらく戻り通知が開始されます。

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