gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:28:54 25 4
gpt4 key购买 nike

我用 C# 做了一个小的异步 tcp 服务器/客户端...

...我一直在想:

  1. C# API 实现了 selectepoll,这是一种经典但简单的异步方式。为什么 Microsoft 引入了 BeginConnect/BeginSend 系列,在我看来,它们的设计更复杂(并且也增加了代码行)。

    <
  2. 因此,使用 BeginXXX()“趋势”,我注意到需要导入 System.Threading(对于事件)。这是否意味着线程也参与其中?

最佳答案

select和poll有两个问题:

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

如果能够指定回调函数会在完成时神奇地调用,那就更好了。这是自动扩展的,不需要集中调度。 .NET 中的异步 IO 非常简单。它只是(有效地)工作。

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

研究 async/await 也可以与套接字一起使用。它们提供了我所知道的使用异步 IO 的最简单方法。这包括所有语言和平台。从易用性来看,select 和 poll 甚至不在同一个级别。

关于c# - C#中异步套接字类的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24723472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com