繁体   English   中英

异步重复读取流中的内容?

[英]Asychronously repeatedly reading from a stream?

如何构造以下代码,以便可以分块读取所有流。 当前,它一直返回相同的数据。 无法前进。

public static IObservable<byte[]> AsyncRead(this Stream stream, int bufferSize)
{
    var asyncRead = Observable.FromAsyncPattern<byte[], int, int, int>(stream.BeginRead, stream.EndRead);

    var buffer = new byte[bufferSize];

    return asyncRead(buffer, 0, bufferSize)
        .Select(cbRead =>
                    {
                        var dataChunk = new byte[cbRead];

                        Buffer.BlockCopy(buffer, 0, dataChunk, 0, cbRead);

                        return dataChunk;
                    })
        .Repeat()
        .TakeWhile(dataChunk => dataChunk.Length > 0);
}

也陷入同一个陷阱。 异步流的行为类似于可重播的流。 尽管只包含一项。 要解决此问题,请像这样将其包装在Defer

Observable.Defer(() => asyncRead(buffer, 0, bufferSize))
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM