编程语言
首页 > 编程语言> > C#中的异步套接字类的设计

C#中的异步套接字类的设计

作者:互联网

我已经在C#中完成了一个小型的异步TCP服务器/客户端…

…而且我一直在想:

> C#API实现了select和epoll,这是一种经典但简单的异步方法.微软为什么要引入BeginConnect / BeginSend系列,在我看来,该系列的设计更加复杂(也增加了代码行).
>因此,使用BeginXXX()“趋势”,我注意到System.Threading导入是必需的(对于事件).这是否也意味着涉及线程?

解决方法:

选择和轮询有两个问题:

>它们通常以单线程方式使用.由于这个原因,它们无法扩展.
>他们要求所有IO必须通过进行轮询的中央位置进行调度.

能够仅指定将在完成时神奇地调用的回调会更好.这会自动扩展,并且无需分配中央位置. .NET中的异步IO完全没有麻烦.它只是工作(有效).

Windows上的异步IO是无线程的. IO运行时,没有一个线程在忙于为其服务. .NET中的所有异步IO都使用操作系统支持的真正异步IO.这意味着IO或完成端口重叠.

查看异步/等待,它也可以与套接字一起使用.它们提供了使用我所知道的最简单的异步IO方式.这包括所有语言和平台.通过易用性判断,select和poll甚至不在同一个联盟中.

标签:multithreading,sockets,asynchronous,polling,c
来源: https://codeday.me/bug/20191029/1959336.html