TcpClient接收数据时的事件

本文关键字:事件 数据 TcpClient | 更新日期: 2023-09-27 18:28:29

是否有任何方法可以在不轮询的情况下检测TcpClient中可用的新数据?通过与TcpClient或用于读取它的Stream相关的事件。

轮询浪费资源。因此,的某个地方有一个事件可以订阅,以便收到服务器发送的新数据的通知,这似乎是合乎逻辑的。没有轮询,没有第三方库,也没有非托管代码。只是简单的托管内置.net。如果TcpClient是错误的工具-这也没关系-什么的正确类?

TcpClient接收数据时的事件

只需使用异步IO。异步IO是基于回调的,与事件非常相似。

在现代风格中,你会说类似await myNetworkStream.ReadAsync(...)的话。在该调用过程中没有线程被阻止。如果这是你第一次听说await,这听起来可能不可能,但这是真的。

回调在这里是不可见的。在旧的APM模式中,它清晰可见:

myNetworkStream.BeginRead(..., asyncResult => { /* callback code */ });

(在这些示例中,我假设您已经从TcpClient获得了NetworkStream的实例。