Pipelines.Sockets.Unofficial.SocketConnection 会在没有请求的情况下刷新吗?

Does Pipelines.Sockets.Unofficial.SocketConnection ever flush without a request?

我正在使用 Marc Gravell 的 Pipelines.Sockets.Unofficial 库通过套接字获取 IDuplexPipe,但我发现需要在刷新之前修改消息 header 的情况。如果我调用 Advance,我是否保证在我调用 FlushAsync 之前它永远不会刷新?它由类型暗示(Advance 是同步的而 Flush 不是)但我希望有人有明确的答案。

此外,我可以在经过某个点后明智地写入缓冲区中的某个点吗?

不,这不能保证。 Advance 方法逻辑上将数据提交到出站管道;一旦提交,如果管道上有 一个活跃的消费者,它可以读取该值并继续处理它。澄清一下,FlushAsync() 方法专门做了两件事,它们只是切线相关:

  • 它确保消费者被唤醒(如果尚未唤醒)
  • 如果有back-pressure,它会延迟生产者,直到消费者清除了一些back-pressure

can I sensibly write to a point in the buffer after I've advanced past it?

没有