我需要从
最初,我使用
MSDN文档建议:
如果没有可供读取的数据,则Read方法返回0。如果远程主机关闭连接,并且所有可用数据都已接收,则Read方法立即完成并返回零字节。
但在我的情况下,我从未让
在进一步调查中,我发现了
据我所知,
以下是需要回答的问题:
1. 请问有谁能帮我理解
2. 实现所需功能的最佳方法是什么?
NetworkStream
中读取数据,这些数据大小和发送时间都是随机的。我正在实现一个多线程应用程序,每个线程都有自己的流来读取数据。如果流上没有数据,则应用程序应该等待数据到达。但是,如果服务器已经完成了数据传输并终止了会话,则应退出。最初,我使用
Read
方法从流中获取数据,但它会阻塞线程并一直等待,直到数据出现在流中。MSDN文档建议:
如果没有可供读取的数据,则Read方法返回0。如果远程主机关闭连接,并且所有可用数据都已接收,则Read方法立即完成并返回零字节。
但在我的情况下,我从未让
Read
方法返回0并正常退出。它只是无限期地等待。在进一步调查中,我发现了
BeginRead
,它会异步地监视流并调用回调方法,一旦接收到数据就会触发。我也尝试了使用这种方法的各种实现,但我无法确定何时使用BeginRead
比Read
更有益。据我所知,
BeginRead
仅具有异步调用的优点,这不会阻塞当前线程。但在我的应用程序中,我已经有一个单独的线程来读取和处理流中的数据,因此这不会有太大的区别。以下是需要回答的问题:
1. 请问有谁能帮我理解
BeginRead
的等待和退出机制以及它与Read
的区别?2. 实现所需功能的最佳方法是什么?
Read
不返回的问题。否则,你的方法似乎是正确的方向。 - user203570