シナリオは次のとおりです。
サーバーに要求を送信するクライアントがあります (ソケットまたは wcf サーバーになりますが、これは重要ではありません)。
サーバーはオープンな二重チャネルを維持し、それを使用して応答 (シリアル化されたデータ) をクライアントに送信します。サーバーは要求を処理し、クエリの生成 (要求のパラメーターに基づく) と、さまざまな種類のデータ ソース (SQL サーバー、ファイル システム、分析サービス サーバー - olaps、オフライン キューブなど) に対する実行を行います。非常に重い IO バウンド タスク - 確かに長時間実行されることがよくあります。
パフォーマンスは重要です。同時に数百または数千のリクエストを検討してください。スケーラブルでなければなりません。
TPL を使用したことも、非同期サーバーを作成したこともありません。しかし、私は数日間たくさん読んだのですが... まだ頭を包むことができません.
- TPL (4.5 ではなく 4.0) はここで良い選択ですか?
- サーバーに送信されるすべてのリクエストに対して tpl タスクを作成する必要がありますか? (非同期処理用)
- これらのタスクを LongRunning オプションで作成する必要がありますか? (そのため、ThreadPool は関係ありません)
- リクエストのキューメカニズムを実装する必要がありますか? どのように?
- 要求処理のすべての部分 (a. クエリの生成 b. データ ソースに対するクエリの実行) を別々のタスク (継続) でチェーン化する必要がありますか、それとも両方に単一のタスクを使用しても問題ありませんか? とb。
- クエリの実行に .FromAsync タスク生成を使用する必要がありますか? または、標準の .StartNew で十分ですか?
- 上記の要件を考慮して、他に注意すべき重要な領域は何ですか?