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);
}

questionAnswers(1)

yourAnswerToTheQuestion