c# - TcpClient 收到数据时的事件

标签 c# asp.net .net tcp stream

有没有什么方法可以在不进行轮询的情况下检测 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/

相关文章:

c# - 如何将具有一个键和多个值的列表绑定(bind)到 GridView 或 Repeater

c# - 如何访问存储在服务帐户中的 X.509 证书?

asp.net - 编译 ASP.NET 网站,某些引用未复制到临时 ASP.NET 文件文件夹

c# - 阻止 asp :Button OnClick event in C# from the OnClientClick event in JavaScript?

c# - LINQ - 如何将 distinct 与 order by 一起使用?

c# - 如何在 C# 中的表单中使用具有不同控件的多个面板

c# - 如果 XML 文件损坏,如何使用 C# 进行验证

c# - 获取 NullReferenceException

javascript - 我们如何将多个参数传递给 PageMethod 的 onSuccess 方法?

.net - 更新同版本号的Nuget包