J'ai un thread de travail dans mon application qui est responsable de trois choses différentes. Les demandes pour deux des travaux apparaissent dans les files d'attente que j'ai écrites, l'autre travail est activé lorsqu'une demande apparaît sur un flux réseau. Je voudrais que mon thread de travail attende quand il n'y a pas de travail à faire. C'est facile avec les deux files d'attente car elles exposent un ManualResetEvent qui est défini quand elles ont des éléments, cependant le NetworkStream ne semble pas avoir ceci. Le NetworkStream a été récupéré à partir d'un TcpClient.Comment attendre qu'un flux réseau ait des données à lire?
Ce que je suis après est le code qui ressemble à ceci:
while (notDone)
{
WaitHandle.WaitAny(new WaitHandle[] { queue1.HasData, queue2.HasData, netStream.HasData });
// ...
if (netStream.DataAvailable)
{
netStream.Read(buffer, 0, 20);
// process buffer
}
}
Est-ce que quelqu'un connait un moyen d'obtenir un WaitHandle qui est définie lorsqu'un NetworkStream dispose de données?
Est-il possible d'obtenir le BeginRead lire zéro octets? –
Si l'hôte distant arrête la connexion et qu'il n'y a plus de données disponibles, 0 octet sera lu. Pourquoi demandez-vous? – SpaceghostAli
Si vous ne pouvez pas faire en sorte que BeginRead lise zéro octet, vous devez commencer à gérer le tampon de lecture entre la boucle principale et le rappel. C'est totalement faisable mais n'est pas aussi bien que je le voudrais. –