등록 된 이벤트 대리자를 처리하는 순서 또는 우선 순위를 지정하는 방법이 있습니까? 예를 들어 다른 이벤트가 발생하기 직전에 처리하고 싶은 이벤트가 있지만 다른 객체도 이벤트에 대한 리스너를 등록하도록 허용합니다. 이것이 어떻게 성취 될 수 있는가?이벤트 우선 순위 및 프로세스 순서
은 내가 UDP 스트림을 통해 메시지를 전송하는 서버를 가지고, 내가 PROC1 항상이 일을 위해 2
class MessageProcessor
{
private DataClient Client;
public MessageProcesser(DataClient dc)
{
Client = dc;
Client.MessageReceived += ProcessMessage;
}
void proc1(MessageEventArgs e)
{
// Process Message
}
}
class DataClient
{
public event MessageReceievedHandler MessageReceived;
}
void main()
{
DataClient dc = new DataClient();
MessageProcessor syncProcessor = new MessageProcessor(dc); // This one is high priority and needs to process all sync immediately when they arrive before any data messages
MessageProcessor dataProcessor= new MessageProcessor(dc); // This one can process the data as it has time when sync messages are not being processed.
// do other stuff
}
PROC 전에 그 이유를 실행하려면 말할 수 있습니다. 그것은 데이터 버스트 전에 동기화 메시지를 보냅니다. 동기화 메시지가 수신 될 때 두 핸들러가 실행되지만, 대기 시간을 줄이기 위해 syncProcessor 객체 이벤트를 dataProcessor 이벤트 전에 처리하고 싶습니다. 이렇게하면 처리중인 동기화 메시지의 대기 시간이 줄어 듭니다.
또한 내 팀원이 특정 메시지를 처리하기 위해 이벤트를 등록 할 수도 있습니다. 그들은 이벤트를 등록 할 자신 만의 객체를 가질 수 있습니다 (MessageProcessor가 아닐 수도 있습니다). 심지어 동기화 메시지의 대기 시간은 가능한 한 짧아야합니다.
편집 더 나은 예를 들어 목표를 명확하게했습니다.
처리기에서 MessageEventArgs를 대기열에 넣은 다음 우선 순위 및 의존성을 구현하는 방법을 시작합니다.이 실수를 너무 자주하지 않으려 고 노력하기 전에 당신이 알고있는 버그 퍼스트, 나 자신과 열띤 대화가 있었을 것입니다. –
이 예제에서 같은 리소스/객체 내에 두 이벤트를 모두 등록하는 것이 무의미하다는 것을 깨달았을 때 나는 단순함을 위해 예제를 넣었다. 내 목표를보다 정확하게 표현하기 위해 설정을 변경하겠습니다. – galford13x
@ 토니 : 재미있는 아이디어. 나는 이것이 문제의 영역에 들어갈 수 있다는 데 동의한다. 실제로 누군가가 이벤트를 등록 할 때 인터페이스를 작성하려고 할 때 DataClient가이를 등록했지만 메시지를 수신하면 정의 된 순서로 핸들러의 이벤트를 호출하는 우선 순위 맵핑 오브젝트가 있습니다. 그러나 이것 역시 내려가는 나쁜 길과 같았습니다. – galford13x