C# Tcp 通信线程池与异步调用

标签 c# asynchronous tcp threadpool

我有一个 C# 应用程序,它监听传入的 TCP 连接并从先前接受的连接接收数据。请帮助我是否使用 Threadpool 或 Async 方法来编写程序?请注意,一旦连接被接受,它不会关闭它并继续从该连接接收数据,同时它接受更多连接

最佳答案

当代码运行时间少于半秒并且没有大量会阻塞线程的 I/O 时,线程池线程的效果最佳。这与您描述的情况完全相反。

此处强烈指示使用 Socket.BeginReceive()。在操作级别和框架上都经过高度优化,您的程序使用单个线程来等待所有 挂起的读取完成。扩展以处理数千个事件连接是非常可行的。

干净地编写异步代码可能非常困难,您通常在线程池线程上运行的方法中使局部变量成为类的字段的变量。您需要一个状态机来跟踪连接状态。您将从 C# 版本 5 中提供的 async/await 支持中受益匪浅,它允许您将这些状态变量转回局部变量。您在 this answer 中找到的小 wrapper 或 this blog post会有很大帮助。

关于C# Tcp 通信线程池与异步调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20676538/

相关文章:

Java:TCP套接字连接。客户端接收 null/readline() 返回 null

c# - AJAX 调用 C# 方法不返回数据

c# - 如何将 T 转换为类以匹配 "where T : class"约束?

asynchronous - python-requests 是否支持 HTTP2 和异步调用?

javascript - 了解Node.JS使用async.waterfall如何执行外部功能

c# - 如何即时编辑任何事件的 tcp 数据包然后重新发送?

c# - 在 wp7 中重置应用程序设置

c# - 如何从数组中提取 3 个随机值?

.net - WCF异步回调

c# - 在C#中创建多个TCP连接然后等待数据