登録されたイベントの代理人を処理する順序や優先度を指定する方法はありますか?たとえば、他のイベントの直前に処理したいイベントがありますが、他のオブジェクトにもイベントのリスナーを登録することができます。これはどのように達成できますか?イベントの優先度と処理の順序
は私がUDPストリームを介してメッセージを送信しているサーバーを持って、私はPROC1はいつもこれを行うために2
class MessageProcessor
{
private DataClient Client;
public MessageProcesser(DataClient dc)
{
Client = dc;
Client.MessageReceived += ProcessMessage;
}
void proc1(MessageEventArgs e)
{
// Process Message
}
}
class DataClient
{
public event MessageReceievedHandler MessageReceived;
}
void main()
{
DataClient dc = new DataClient();
MessageProcessor syncProcessor = new MessageProcessor(dc); // This one is high priority and needs to process all sync immediately when they arrive before any data messages
MessageProcessor dataProcessor= new MessageProcessor(dc); // This one can process the data as it has time when sync messages are not being processed.
// do other stuff
}
procの前に理由を実行したいとしましょう。それはデータのバーストの前に同期メッセージを送信します。私は同期メッセージが受信されたときに両方のハンドラが起動することを知っていますが、latencyを減らすために、syncProcessorオブジェクトのイベントをdataProcessorイベントの前に処理したいと思います。これにより、処理中の同期メッセージの待ち時間が短縮されます。
さらに、私のチームの他の人が特定のメッセージを処理するためにイベントを登録することもできます。彼らはイベントを登録する独自のオブジェクトを持つかもしれません(MessageProcessorではないかもしれません)。でも、同期メッセージはできるだけ短い待ち時間を持つべきです。
EDITより良い例で目的をより明確にしました。
ハンドラでMessageEventArgsをキューに入れ、次に優先度と依存性を実装するメソッドを開始します。これはあなたが知っている不幸なことです。私がこれをあまりにも頻繁に失敗させないようにする前に、私は自分と熱く話しています。 –
この例では、同じリソース/オブジェクト内に両方のイベントを登録することが無意味であることを理解しているので、わかりやすくするために例を示しました。目標をより正確に表すためにセットアップを変更します。 – galford13x
@トニー:興味深い考え。私はこれが問題の領域に入る可能性があることに同意します。私は実際には、誰かがイベントを登録したときに、DataClientがそれを登録するが、メッセージが受信されたときに定義された順序でハンドラのイベントを呼び出す優先度マッピングオブジェクトを持っているというインタフェースを作成しようと考えていました。しかし、これも下に行く悪い道のように思えました。 – galford13x