2

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

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

4

1 回答 1

2

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

  • 它确保消费者被唤醒(如果还没有)
  • 如果有背压,它会延迟生产者,直到消费者清除了一些背压

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

于 2019-06-06T16:41:32.463 回答