首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.IO.Pipelines:接收连续消息

System.IO.Pipelines:接收连续消息
EN

Stack Overflow用户
提问于 2020-03-06 07:35:35
回答 1查看 352关注 0票数 1

我对管道的概念相当陌生,我喜欢实现一个客户端,它接收来自服务器的消息。服务器使用相当恒定的X秒延迟自动推送这些消息。我确实了解管道的基本知识及其使用--场景--还有一个关于Dev女士-博客的很好的教程。以下问题直接引用了本教程:我确信我可以使用一个管道和两个任务来处理从服务器发送的所有消息(直到连接关闭),但是在本教程中的循环中有两个语句,其中第二个语句混淆了我使用这两个任务处理所有消息的假设--我理解第一个条件。

代码语言:javascript
复制
int bytesRead = await socket.ReceiveAsync(memory, SocketFlags.None);
if (bytesRead == 0) { break; }

但第二个完全让我困惑:

代码语言:javascript
复制
FlushResult result = await writer.FlushAsync();
if (result.IsCompleted) { break; }

这里到底发生了什么?在哪些场景中result.IsCompleted是真实的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-06 07:45:52

正如文档所说:

IsCompleted获得一个值,该值指示读取器不再读取写入PipeWriter的数据。

因此,这应该是一个测试,如果刷新和PipeReader.ReadAsync成功。

就像你的链接博客文章中所描述的那样:

当对PipeReader.ReadAsync()的调用返回时,我们得到一个包含两个重要信息的ReadResult,以ReadOnlySequence形式读取的数据和一个bool IsCompleted,它让读者知道作者是否完成了写作(EOF)。

PipeWriter的情况正好相反,而不是PipeReader。这似乎是必要的,因为它们并行运行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60559476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档