TcpClient接收数据时的事件

时间:2014-10-30 10:46:02

标签: c# asp.net .net tcp stream

有没有办法在没有轮询的情况下检测TcpClient中可用的新数据?通过与TcpClient相关的事件或用于读取它的Stream。

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

1 个答案:

答案 0 :(得分:3)

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

在现代风格中,你会说await myNetworkStream.ReadAsync(...)之类的东西。在该呼叫期间没有线程被阻止。如果这是您第一次听到await这可能听起来不可能,但这是真的。

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

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

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