2

その瞬間にC#プロジェクトに取り組んでいます-私がやろうとしていることの一般的な考え方は...

ユーザーは、関心のあるシンボルを含む1つ以上のポートフォリオを持っています。各ポートフォリオは、シンボルのデータをcsvにダウンロードして解析し、データに対して一連のルールを実行します。アラートは、これらのルールの結果に基づいて生成されます。設定した間隔が経過するたびにデータなどをダウンロードする

私は、各ポートフォリオを独自のスレッドで実行することを計画していました。そうすれば、間隔が経過すると、各ポートフォリオは、データのダウンロード、解析、およびルールの実行を1つずつではなく同時に実行できます。次に、アラートは、アラートのキューを含む別のスレッド(!)にプッシュする必要があります。アラートを受信すると、クライアントに送信します。

少しだけですが、C#でこれを行うための最良の方法は何でしょうか?スレッド、またはバックグラウンドワーカーのようなものを使用し、アラートキューを別のスレッドで実行するだけですか?

どんなアドバイスも大歓迎です、このようなもののいくつかに新しいので、私が完全に間違っているかどうか私に教えてください:)

4

2 に答える 2

5

ブロッキングコレクションを使用できます。これは、生産者/消費者シナリオをサポートするためのc#4.0の新機能です。

また、1つのコンシューマーと複数のプロデューサーをサポートします。

于 2012-11-14T11:56:16.280 に答える
0

これが完全に間隔駆動型であり、各間隔の終わりにクライアントにアラートをアップロードできる場合は、簡略化されたアプローチを使用できます。

インターバルタイマーが作動したとき:

  1. TPLを使用して、データを解析するための同時タスクを起動し、各タスクにアラートをメインに戻すためのコールバックメソッドを提供します。
  2. コールバックは、lockステートメントで保護されたリストにアラートを書き込みます。
  3. すべてのタスクが完了するのを待ちます。次に、継続ルーチンを実行してアラートをクライアントに転送します。
  4. インターバルタイマーを再起動します。

アップロードが完了する前に次の間隔の処理を開始する必要がある場合は、1つのリストに書き込み、それをアップロードメソッドに渡してから、新しいリストへのアラートの書き込みを開始し、元に戻して、ダブルバッファアプローチを使用できます。アラートを収集してアップロードするときに、リスト間を移動します。

于 2012-11-14T19:44:41.360 に答える