二重Wcfサーバースレッディング-同期DB I / Oを行う場所
-
05-07-2019 - |
質問
基本的な前提は次のとおりです。
-
Wcfは、通常のThreadPoolスレッド(QueueUserWorkItem)ではなくIOCPスレッド(UnsafeQueueNativeOverlapped)でサービス操作メソッドを実行します。
-
I / Oのブロックは、一方向のサービス操作メソッドの内部で行うべきではありません 。
-
I / Oのブロックは、通常のThreadPoolスレッド内で行われるべきではありません 。
最良の戦略は、非同期呼び出しをチェーンすることだと思います。そのため、一方向サービス操作にメッセージを受信した場合、dbに対して非同期呼び出しを行い、それが完了したら、次の非同期db呼び出しなどを行い、最後にwcfコールバックを介して応答します...
ただし、すべてのデータベース呼び出しを非同期で実行するのは困難です。上記のルール2と3を破ることに頼りましたが、結局はThreadPoolを枯渇させると思うので、私はそれが好きではありません。より良い戦略はありますか?
Jon SkeetのCustomThreadPoolの使用を検討しましたが、それが答えであるかどうかはわかりません。
解決
ThreadPoolが実行する同期I / O呼び出しをキューに入れることにより、ルール3を破ることをお勧めします。サービスメソッドはまだすぐに戻りますが、作業は最終的にバックグラウンドで行われ、おそらく戻り通知が開始されます。
所属していません StackOverflow