このコードは処理時間を通じてどのように動作しますか?(つまり、どの程度同期していますか?)
public delegate void FooDelegate(bytes[] data);
public event FooDelegate FooEvent;
FooEvent += new FooDelegate(Process_X);
FooEvent += new FooDelegate(Process_Y);
FooEvent += new FooDelegate(Process_Z);
while (receiving)
{
byte[] data = getRealTimeData();
StopWatch.Start();
FooEvent(data);
StopWatch.Stop();
Console.Write(StopWatch.Elapsed.Millisec));
StopWatch.Reset();
}
いくつか質問があります:
- FooEventを呼び出すと、各サブスクリプションプロセスが順次/同期的に呼び出されますか?(おそらくそうだ...)
- 各Process_Nが終了するまでに長い時間がかかると仮定すると、各Process_Nへの呼び出しは、終了するまでチェーンをブロックしますか(つまり、次のプロセスへの呼び出し)?これが当てはまる場合、イベントがプロセスX、Y、Zを並行して呼び出すようにしてから、それらを1つずつ呼び出して順番に終了するのではなく、すべてが終了するのを待つ方法はありますか?
いくつかの確認:
- チャンネル登録者数が非常に多くなると、ストップウォッチで印刷される時間が長くなると思います
- Process_Nの処理ロジックが重くなると、StopWatchによって出力される時間にも影響します。