用途:讲解 .NET 中 System.IO.Pipelines 的高性能 I/O 模式,用于构建高吞吐网络服务与二进制协议解析。相比传统 Stream,它自动管理池化缓冲区、用 ReadResult 与 SequencePosition 处理不完整读取、内置背压、通过 ReadOnlySequence<byte> 实现零拷贝切片。
主要能力:PipeWriter 侧用 GetMemory/GetSpan 取缓冲、Advance 提交字节数、FlushAsync 发布数据并响应背压;PipeReader 侧用 ReadAsync 取 ReadResult,解析后调用 AdvanceTo(consumed, examined)。背压由 PipeOptions 的 pauseWriterThreshold(默认 65536)与 resumeWriterThreshold(默认 32768)控制,缓冲超阈值时 FlushAsync 暂停直到读者消费。协议解析示例包括 4 字节大端长度前缀与换行分隔两种模式,并演示 ReadOnlySequence 单段/多段处理、SequenceReader<byte> 简化解析。
使用方式:用 PipeReader.Create/PipeWriter.Create 适配现有 Stream;Kestrel 中通过 ConnectionHandler 访问 connection.Transport.Input/Output,或使用 IDuplexPipe。
适用场景:自定义 TCP 服务器、WebSocket、命名管道协议、Kestrel 连接中间件。
限制与注意:每次 ReadAsync 必须配对 AdvanceTo,否则泄漏池化内存;AdvanceTo 后不得再访问 ReadResult.Buffer;未找到完整消息时 consumed 设为 buffer.Start、examined 设为 buffer.End,避免忙等;需检查 FlushResult.IsCompleted;简单流到流复制用 Stream.CopyToAsync 即可;读取定宽值前先检查长度。异步基础、基准测试与文件 I/O 不在本技能范围内。