2012-07-17 3 views
1

이 코드는 처리 시간을 통해 어떻게 작동합니까? (즉, 그것은 어떻게 동기?) 동기/차단이 이벤트/위임 구독 인 방법은 무엇입니까?

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(); 
} 

나는 몇 가지 질문이 있습니다

  1. 각 가입 프로세스를 순차적/synchornously 호출에 FooEvent 결과에 대한 호출? (아마도 yes ...)
  2. 각 Process_N이 끝내는 데 시간이 오래 걸린다 고 가정하면, 끝날 때까지 각각의 호출이 체인 (즉, 다음 호출)을 차단할 것인가? 이것이 사실이라면, 프로세스 X, Y, Z를 병렬 방식으로 호출하는 방법 다음에 하나씩 호출하고 각각이 끝날 때까지 기다리지 않고 모든 프로세스가 끝날 때까지 기다리십시오.

몇 확인서 : 가입자의 수는 매우 높은 들어간 경우

  1. , 내가 얻을 것이다 스톱워치 인쇄 시간을 추측
  2. 높은 Process_N의 처리 로직은 무거운 얻을 경우, 또한 스톱워치
+1

'병렬 이벤트'를 검색하면 다음 질문을 찾을 수 있습니다. http://stackoverflow.com/questions/7834130/events-with-task-parallel-library http://stackoverflow.com/questions/ 1516119/c-sharp-events-how-to-process-in-a-parallel-manner http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c-sharp –

+0

@gt : 단. 이 질문을 답으로 올리시겠습니까? –

답변

1

실제로 이벤트가 순차적으로 그리고 동 기적으로 실행되기 때문에 이벤트 처리기의 병렬 처리가 도움이되는 것처럼 보입니다. 사용자 정의 이벤트 핸들러 수행 할 작업에 대한 자세한 내용은 다음 질문을 참조하십시오

public event FooDelegate FooEvent 
{ 
    add 
    { 
     // code to add an event handler 
    } 
    remove 
    { 
     // code to remove an event handler 
    } 
} 

:

는 작성할 수 있습니다 사용자 정의 이벤트 처리기를 만들려면

delegates and events의 Jon Skeet의 페이지.

1

1 인쇄 시간에 영향을 미칠 것입니다 : 예 2 : 이벤트 결과를 반환 할 수 있습니다에 예 그것은 있습니다.

하지만 이벤트 처리기를 실행하는 데 시간이 오래 걸리지 않도록 구현해야합니다. 무거운 짐을 들어야하는 경우 이벤트 처리기에서 시작된 작업에서 계산을 실행하는 것을 고려하십시오.

+0

이 작업은 구독자를 병렬 방식으로 호출해야합니까? –

+0

no 이벤트 처리기가 많이하지 않으면 호출을 그대로 사용할 수 있습니다. 요점은 짧은 계산 만 수행하는 처리기를 갖는 것입니다 – Carsten

관련 문제