相关疑难解决方法(0)

NetworkStream.Read()和NetworkStream.BeginRead()之间的区别?

我需要读取NetworkStream哪个会随机发送数据,数据包的大小也会不断变化.我正在实现一个多线程应用程序,其中每个线程都有自己的流来读取.如果流上没有数据,应用程序应该一直等待数据到达.但是,如果服务器完成了发送数据并终止了会话,那么它应该退出.

最初我使用该Read方法从流中获取数据,但它用于阻塞线程并一直等待直到数据出现在流上.

MSDN上的文档建议,

如果没有可用于读取的数据,则Read方法返回0.如果远程主机关闭连接,并且已收到所有可用数据,则Read方法立即完成并返回零字节.

但在我的情况下,我从来没有得到Read返回0并优雅退出的方法.它只是无限期地等待.

在我的进一步调查中,我遇到了BeginRead监视流并在接收数据时异步调用回调方法.我也试图使用这种方法寻找各种实现,但是,我无法确定何时使用BeginRead是有益的而不是Read.

在我看来,它BeginRead具有异步调用的优势,它不会阻止当前线程.但是在我的应用程序中,我已经有了一个单独的线程来读取和处理来自流的数据,所以这对我来说没什么大不了的.

  • 任何人都可以帮我理解等待和退出机制, BeginRead它有什么不同Read

  • 实现所需功能的最佳方法是什么?

.net c# multithreading networkstream

8
推荐指数
2
解决办法
2万
查看次数

标签 统计

.net ×1

c# ×1

multithreading ×1

networkstream ×1