私はC#でTCPサーバーを作成しており、非同期通信にBeginXXXメソッドとEndXXXメソッドを使用しています。私が正しく理解していれば、BeginXXXを使用すると、メインスレッドが新しい接続を受け入れ続けている間、リクエストはスレッドプールで処理されます(リクエストの準備ができている場合)。
問題は、これらのAsyncCallbackの1つでブロッキングアクションを実行するとどうなるかということです。タスクとしてブロッキング操作を実行する方が良いでしょうか?タスクもスレッドプールを使用しますね。
ユースケースは次のとおりです。
メインスレッドは、BeginAcceptを使用して接続を受け入れるリスニングソケットをセットアップし、BeginReceiveを使用してそれらの接続のリスニングを開始します。完全なメッセージが受信されると、そのメッセージの内容に応じて関数が呼び出されます。すべての場合の80%で、これらの関数はデータベースのクエリ/挿入/更新を開始します。