Fast Repeat TakeWhile causa loop infinito
Como posso fazer a seguinte repetição observável até stream.DataAvailable é false? Atualmente, parece que nunca para.
AsyncReadChunk e Observable.Return dentro da seção Adiar, faça OnNext e OnCompleted. Quando a Repetição recebe a chamada OnNext, ela a passa para TakeWhile. Quando o TakeWhile não está satisfeito, ele conclui o observável, mas acho que o OnCompleted que vem logo após o OnNext é tão rápido que faz com que o Repeat assine novamente o observável e cause o loop infinit
Como posso corrigir esse comportamento?
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);
}