這段代碼如何通過處理時間來表現? (即,如何同步呢?)如何同步/阻塞是事件/委託訂閱?
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();
}
我有幾個問題:
- 將在調用每個訂閱流程順序/ synchornously調用FooEvent結果呢? (可能是......)
- 假設每個Process_N需要很長時間才能完成,那麼每個呼叫是否會阻塞鏈(即呼叫下一個鏈)直至完成?如果這是真的,如何讓事件調用以並行方式處理X,Y,Z然後等待所有這些完成,而不是逐個調用它們,然後依次等待每個完成?
幾個確認:
- 如果用戶數量變得非常高,我想用秒錶打印的時間會獲得更高的
- 如果Process_N處理邏輯變得更重,它也會影響StopWatch打印的時間
尋找'平行事件',你會發現這些問題:http://stackoverflow.com/questions/7834130/events-with-task-parallel-library http://stackoverflow.com/questions/ 1516119/c-sharp-events-how-to-process-event-in-a-parallel-manner http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c-sharp – 2012-07-17 10:44:27
@gt:甜。你能把這個作爲答案嗎? – 2012-07-17 11:19:27