세 가지 다른 일을 담당하는 응용 프로그램에 작업자 스레드가 있습니다. 내가 작성한 대기열에서 두 개의 작업에 대한 요청이 나타나고 요청이 네트워크 스트림에서 나타나면 다른 작업이 활성화됩니다. 수행 할 작업이 없을 때 작업자 스레드가 대기하도록합니다. 두 개의 큐가 Item을 가질 때 설정되는 ManualResetEvent를 노출 할 때이 작업은 쉽지만 NetworkStream에는이 항목이없는 것 같습니다. NetworkStream은 TcpClient에서 검색되었습니다.네트워크 스트림에서 데이터를 읽을 때까지 어떻게 기다려야합니까?
내가 후 나는 것은 다음과 같이 보입니다 코드는 다음과 같습니다
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData });
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
는 사람이는 NetworkStream 데이터가있을 때 설정되는 WaitHandle이 얻을 수있는 방법을 알고 있나요?
그것은 0 바이트를 읽도록하는 BeginRead를 얻을 수 있습니까? –
원격 호스트가 연결을 종료하고 더 이상 사용할 수있는 데이터가없는 경우 0 바이트가 읽혀집니다. 왜 묻는거야? – SpaceghostAli
BeginRead를 0 바이트로 읽을 수 없으면 기본 루프와 콜백 사이의 읽기 버퍼를 관리해야합니다. 이것은 완전히 할 수 있지만 내가 좋아하는만큼 좋지 않습니다. –