有没有什么方法可以在不进行轮询的情况下检测 TcpClient 中可用的新数据?通过与 TcpClient 或用于读取它的 Stream 相关的事件。
轮询会浪费资源。因此,似乎合乎逻辑的是,某处 有一个可以订阅的事件,以便在服务器发送新数据时收到通知。没有轮询,没有第 3 方库,也没有非托管代码。只是简单的托管内置 .net。如果 TcpClient 是错误的工具 - 那也没关系 - 什么是正确的类?
最佳答案
只需使用异步 IO。异步 IO 是基于回调的,这与事件非常相似。
在现代风格中,您会说类似 await myNetworkStream.ReadAsync(...)
的内容。在该调用期间没有线程被阻塞。如果这是您第一次听说 await
,这听起来不太可能,但却是事实。
回调在这里是不可见的。在旧的 APM 模式中,它清晰可见:
myNetworkStream.BeginRead(..., asyncResult => { /* callback code */ });
(在这些示例中,我假设您已经从 TcpClient
获得了 NetworkStream
的实例。
关于c# - TcpClient 收到数据时的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26650946/