[英]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.