-1

市場データを表示するための GUI を設計中です。現在、同じデータを消費するが、その異なる側面を表示する複数のウィンドウがあります。このシステムを構築する最善の方法を見つけようとしています。

市場データの単一のプロデューサーと、プロデューサーにコールバックを登録する複数のコンシューマーがあります。プロデューサはデータの準備ができると、コンシューマのリストを反復処理し、コールバックを介して各コンシューマにデータを配布します。これがデータを配布する最良の方法かどうかはわかりません。各コンシューマーは、データを取得する前に、前のコンシューマーがコールバックの処理を完了するまで待機する必要があります。

すべての消費者が同時に、または最小限の遅延でデータを取得できる方法はありますか? 私は C# 4.0 を使用していますが、これを可能にする言語機能があるかどうかを知りたいです。

4

4 に答える 4

0

このシナリオでは、RabbitMQ や MSMQ などのキューを使用する必要があります。これらは、このタイプのパブリッシャー/サブスクライバーの操作に最適です。

それができない場合は、スレッドを使用してコールバックをトリガーするか、それらを WCF の発火および忘却呼び出し (OneWay) として設定できます。

于 2013-05-22T21:01:50.933 に答える
0

登録されたコールバックのそれぞれが独自のスレッド (ほとんどの場合、スレッド プール スレッド) から呼び出されることが重要な場合、それは簡単に実行できます。

public class Foo
{
    private HashSet<Action> callbacks = new HashSet<Action>();
    public event Action MyEvent
    {
        add
        {
            callbacks.Add(value);
        }
        remove
        {
            callbacks.Remove(value);
        }
    }

    private void FireMyEvent()
    {
        foreach (var action in callbacks)
        {
            ThreadPool.QueueUserWorkItem(o => { action(); });
        }
    }
}
于 2013-05-22T21:03:14.730 に答える