这段代码在处理时间内将如何表现?(即,它有多同步?)
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 的调用是否会阻塞链(即对下一个的调用)直到它完成?如果这是真的,如何使事件以并行方式调用 Processes X、Y、Z 然后等待它们全部完成,而不是一个一个地调用它们并依次等待每个完成?
一些确认:
- 如果订阅者数量非常多,我猜秒表打印的时间会变高
- 如果 Process_N 中的处理逻辑变重,也会影响 StopWatch 打印的 Time