実行中のタスクの基本的なキューがあります (3 つの別々のシステムと通信する c# WinForms アプリ)。Web サービスの 1 つが通常の速度で応答しないことを決定するまで、すべてが優れています。
ジョブをマルチスレッド化して高速化することに興味はありませんが、本番環境で使用しているので、少なくとも 2 つのスレッドでジョブを実行することの利点がわかります。トラックインを維持し、両方がブロックされた場合、おそらく任意の数のスレッドがブロックされ、私はそれを処理します。
質問は、これは私が今説明した一般的なパターンですか、そのパターンの名前、および/または素晴らしい参照またはフレームワーク、または車輪を再発明しないようにするのに役立つものはありますか?
コメント/回答に基づく追加
タスクは同時に実行できます。私はスピードのためにマルチスレッド設計を精査しないことを選択しましたが、まれなタスクの待ち時間に直面して一貫したパフォーマンスを達成するためにそれを検討しています.
私の推測では、Web サービスへの呼び出しは、例外的ではないと見なされていても、完了までに不釣り合いなほど長い時間がかかることがあります。これは、平均実行時間が 1 秒 (さまざまな Web サービス呼び出しのホストを含む) で、Web サービスにかかる時間の 0.0001% である場合、たとえば N 個のジョブの合計実行時間に (修正済み) 無視できない影響を与えます。応答するのに15秒。
スレッド プールは、「ワーカー スレッドをスピンアップし、その状態を手動で管理する」という別の言い方ですか? または、複雑さを管理するのに役立つものはありますか? この場合、バグを導入する可能性が利益に比例しなくなるのではないかと心配しています...
スレッド プールに似たものを探していると思いますが、レイテンシが検出されたときにのみ追加のスレッドをスピンアップするものです。
コメントの 1 つが仕事を盗むスレッドと呼ばれるものについて、誰かが私にもっと情報を提供できれば、それは有望に思えます。
私が BackgroundWorker コンポーネントを使用しなかった理由は、必要なワーカーの数がわかっている場合に合わせて構築されているように見えるためです。理想的には設計を柔軟に保ちたいと思います
PS: ありがとうございます。ありがとう!