나는이 문제를 여러 번 발견하여 대부분 해킹으로 해결했지만이를 수행하는 방법을보고 싶습니다.C# 응답 대기 중 ...
필자는 RPC와 매우 유사한 통신 프로토콜을 작성하고 있습니다. 이는 내 끝점에서 "응답"을받는 "쿼리"를 묻는 방식입니다.
지금 ... 나는 SendCommand라는 함수를 구현하여 쿼리를 보내고 그 질문에 대한 응답을 기다렸다가 반환하려고합니다.
그래서 이것에 대한 문제는 메시지를 보낼 수 있으며 비동기 적으로 받고, 내가 새 메시지가 도착했습니다 이벤트, 어떤 그것이 통지하고 있다는 점이다
int outside_temp = SendCommand(What is the temperature outside).ToInt();
뭔가를 할 수 있습니다. 언급 한 쿼리에 대한 응답이 도착할 때까지 스레드를 차단하고 데이터 내용을 추출하여 호출자에게 반환해야합니다.
내 문제는 스레드를 차단하는 것입니다. 스레드를 차단하는 것은 문제가되지 않습니다. 우리는 멀티 스레드 응용 프로그램에 대해 이야기하고 있습니다. 따라서 UI는 멈추지 않을 것입니다. 그러나 문제는 이것을 달성하는 올바른 방법은 무엇입니까?
SendCommand 함수 내에서 세마포어를 초기화하고 기다리며 메시지 수신 이벤트 핸들러에서 세마포어를 해제하는 방법을 생각해 봅니다 (올바른 메시지인지 확인한 후).
감사합니다, axos88 당신 인 sendCommand가 신호를 보낼 때까지 단지 수면으로까지 스레드를 대기 당신이, 인 sendCommand (..)를 호출하고 새 스레드를 회전한다 할 수
당신은 C# 5에 의해 제공되는 비동기 방법을 조사한다 작업 기반 비동기 패턴을 따르는 코드를 만들 수 있다면 나머지는 * 훨씬 * 더 간단해질 것입니다. –