有没有办法在没有轮询的情况下检测TcpClient中可用的新数据?通过与TcpClient相关的事件或用于读取它的Stream。
轮询浪费资源。因此,某处可以订阅一个事件似乎是合乎逻辑的,以便获得服务器发送的新数据的通知。没有轮询,没有第三方库,也没有非托管代码。只是简单的托管内置.net。如果TcpClient是错误的工具 - 这也很好 - 是正确的类吗?
答案 0 :(得分:3)
只需使用异步IO。 Async IO是基于回调的,与事件非常相似。
在现代风格中,你会说await myNetworkStream.ReadAsync(...)
之类的东西。在该呼叫期间没有线程被阻止。如果这是您第一次听到await
这可能听起来不可能,但这是真的。
回调在这里是不可见的。在旧的APM模式中,它清晰可见:
myNetworkStream.BeginRead(..., asyncResult => { /* callback code */ });
(在这些示例中,我假设您已从NetworkStream
获得TcpClient
的实例。