TcpClient接收数据时的事件
本文关键字:事件 数据 TcpClient | 更新日期: 2023-09-27 18:28:29
是否有任何方法可以在不轮询的情况下检测TcpClient中可用的新数据?通过与TcpClient或用于读取它的Stream相关的事件。
轮询浪费资源。因此,在的某个地方有一个事件可以订阅,以便收到服务器发送的新数据的通知,这似乎是合乎逻辑的。没有轮询,没有第三方库,也没有非托管代码。只是简单的托管内置.net。如果TcpClient是错误的工具-这也没关系-什么是的正确类?
只需使用异步IO。异步IO是基于回调的,与事件非常相似。
在现代风格中,你会说类似await myNetworkStream.ReadAsync(...)
的话。在该调用过程中没有线程被阻止。如果这是你第一次听说await
,这听起来可能不可能,但这是真的。
回调在这里是不可见的。在旧的APM模式中,它清晰可见:
myNetworkStream.BeginRead(..., asyncResult => { /* callback code */ });
(在这些示例中,我假设您已经从TcpClient
获得了NetworkStream
的实例。