0

私のチームは、サード パーティ システムからデータをポーリングする必要がある Windows サービスを作成しています (サード パーティ システムは、私たちが使用する Web サービスを提供します)。
プロセスは次のようになります
。 1. サードパーティの WS を呼び出し
ます 2. 受信した生データを DB に保存します
3. 生データを処理します
4. 処理されたデータを DB に保存します
5. 繰り返します

チームは、実際には 2 つの異なる論理操作があることに同意しています:
1. 生データの取得と保存
2. 生データの処理と結果の保存

次の設計オプションのどちらが優れているかを判断しようとしています:
オプション 1: 同じ Windows サービスで両方の操作を実行し、それぞれの操作を独自のスレッドで
実行する オプション 2: Windows サービスで最初の操作を実行し、非同期/一方向で実行する2 番目の操作で wcf サービスを呼び出す

あなたの意見では、どのオプションがより良いですか?
より良いと思われる別の選択肢がある場合は、それを共有してください。

ありがとう。

4

2 に答える 2

2

場合によります。

明らかにシーケンシャルなプロセスがあるのに、別のスレッドを使用してデータを読み取ってから処理するのはなぜでしょうか? 最も単純なアプローチは、読み取り、処理、およびおそらくある時点での待機をループする単一のスレッドであるため、サードパーティによってレートが制限されることはありません。

ただし、処理に時間がかかる場合は、単一のポーリング スレッドと、データを処理する一連のワーカーとの間で作業を分割することをお勧めします。

通常、最も単純なオプションが最初の実装に適しています。必要になる前にスレッドと WCF サービス呼び出しを追加することは、ほとんどの場合正しいことではありません。

より良い回答を得るには、より多くの情報を提供する必要があります: サードパーティのサービスは、一度に発信できる通話の数または発信速度を制限していますか? 処理にかかる時間はどれくらいですか? ポーリングの頻度はどれくらいですか? ...

于 2012-07-15T16:40:59.420 に答える
1

あなたのコメントによると、サードパーティのサービスを 1 秒に 1 回ポーリングして 2 つのタスクを開始するスレッドがあると思います。

タスク 1 は、生データをデータベースに保存します。タスク 2 は生データを処理し、結果をデータベースに保存します。

ポーリング スレッドが 1000 エントリを取得すると、遅延なく再度ポーリングする必要があります。

System.Threading.ThreadPool または System.Threading.Tasks.Task のいずれかを使用できます。

于 2012-07-15T18:26:50.657 に答える