¿Cómo puedo hacer que la siguiente repetición observable hasta stream.DataAvailable sea falsa? Actualmente parece que nunca se detiene.Fast Repeat TakeWhile causa un bucle infinito
AsyncReadChunk y Observable.Return dentro de la sección Defer hacer OnNext call then OnCompleted call. Cuando Repeat recibe la llamada OnNext, la pasa a TakeWhile. Cuando TakeWhile no está satisfecho completa el observable, pero creo que el OnCompleted que viene justo después de OnNext es tan rápido que hace que Repeat se vuelva a suscribir a lo observable y cause el ciclo infinito.
¿Cómo puedo corregir este comportamiento?
public static IObservable<byte[]> AsyncRead(this NetworkStream stream, int bufferSize)
{
return Observable.Defer(() =>
{
try
{
return stream.DataAvailable ? AsyncReadChunk(stream, bufferSize) : Observable.Return(new byte[0]);
}
catch (Exception)
{
return Observable.Return(new byte[0]);
}
})
.Repeat()
.TakeWhile((dataChunk, index) => dataChunk.Length > 0);
}
Bien hecho para descubrir cómo resolver su problema, y gracias por compartir su solución. Sin embargo, ¿podría publicar la solución a su pregunta como una respuesta en lugar de editar su pregunta? –
Samet, he trasladado su respuesta automática de la pregunta a una respuesta separada, marcada como wiki de la comunidad. –