Jak czekać, aż strumień sieci będzie miał dane do odczytania?
W aplikacji mam wątek roboczy, który odpowiada za trzy różne rzeczy. Żądania dla dwóch zadań są wyświetlane w kolejkach, które napisałem, drugie zadanie jest aktywowane, gdy żądanie pojawia się w strumieniu sieci. Chciałbym, aby mój wątek robotniczy poczekał, kiedy nie ma pracy do wykonania. Jest to łatwe w przypadku dwóch kolejek, ponieważ ujawniają one ManualResetEvent, który jest ustawiony, gdy mają elementy, jednak wydaje się, że NetworkStream tego nie posiada. NetworkStream został pobrany z TcpClient.
To, czego potrzebuję, to kod wyglądający mniej więcej tak:
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData } );
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
Czy ktoś zna sposób na uzyskanie WaitHandle ustawionego, gdy NetworkStream ma dane?