C#/.NET에서 이벤트 주문에 대한 빠른 질문이 있습니다..NET에서 이벤트 주문
소켓 인터페이스 (TCP)를 읽는 while 루프가 있다고 가정 해 보겠습니다. 인터페이스가 확실히 순서를 처리하고 있습니다 (TCP입니다). 패킷 인터페이스가 작성되어 스트림에있는 각 "패킷"이 작성되면 이벤트 콜백을 통해 다음 "계층"또는 다음 객체로 전달합니다.
while (1) {
readsocket();
if (data received = complete packet)
raiseEvent(packet);
}
내 질문
은 다음과 같습니다 :- 은 이벤트가 순서대로 발생 그래서 여기
은 의사입니까? (즉, 주문 유지)
- # 1은 정확하다고 가정하므로 처리가 완료 될 때까지 while 루프를 차단합니까?
단일 스레드? 예. –
예, while (1)이 유일한 루프이고 하나의 이벤트 리스너 만 있다고 가정합니다. raiseEvent는 하드 블록을 수행합니다 (즉, 다른 소켓 데이터를 읽지 못하게합니다). 또는 본질적으로 이벤트에 대한 별도의 스레드를 생성합니다. 나는 그것이 하드 블록을한다고 짐작하고있다. – Tony
대답이 아니지만 [BlockingCollection] (http://msdn.microsoft.com/en-us/library/dd997371.aspx) ''은이 루프를 사용하는 작업자와 분리하는 훌륭한 솔루션입니다 . –