在Marc Gravell关于管道的博客文章中对管道进行了精彩的介绍后,我正在尝试使用套接字实现管道。
我知道Marc已经提出了Pipelines.Sockets.Unofficial,我正在使用它作为参考,但我有一个问题。
似乎
我的困惑来自于
如果
我知道Marc已经提出了Pipelines.Sockets.Unofficial,我正在使用它作为参考,但我有一个问题。
似乎
SocketAsyncEventArgs
的SetBuffer()
方法有一个新的重载:SetBuffer(Memory<byte>)
这里的意图似乎是与管道很好地集成。我的困惑来自于
Pipe.Reader.ReadAsync()
返回一个包含ReadOnlySequence<byte>
(ReadResult.Buffer
)的ReadResult
。如果
Buffer.IsSingleSegment == true
,那么该怎么做就很明显了:
SocketAsyncEventArgs.SetBuffer(Buffer[0])
但是在存在多个段的情况下,我不确定最佳操作方式是什么。
当然,我可以从管道中获取一个byte[]
并完成操作,但这会产生一次复制(甚至可能不止一次)。
这里ReadOnlySequence<byte>
的预期用途是什么?有没有一种方法可以获取表示序列整个内容的“Memory”?
也许我需要重新阅读Marc的博客文章...