我们可以调用 ReadAsync() 并检查缓冲区中的读取字节...
PipeReader reader = ...;
ReadResult readResult = await reader.ReadAsync();
ReadOnlySequence<byte> buffer = readResult.Buffer;
long availableBytes = buffer.Length
如果在调用 ReadAsync 之前长度没有增加,这是否表明管道结束(没有更多字节要读取)?如果不是,那么检测“管道末端”的正确方法是什么?
我们可以像这样表示缓冲区中字节的消耗:
reader.AdvanceTo(count);
然后检查是否有任何未消耗的字节,或者未来提供字节的可能性(即生产者尚未发出信号,它已停止向管道添加新字节)
readResult.IsCompleted
但是,如果我在缓冲区中寻找一个(或多个)序列,并在使用它之前等待一个完整的序列,那么即使缓冲区包含所有可用字节并且生产者已发出完成信号,IsComplete 似乎仍然为假。
谢谢。