gpt4 book ai didi

c# - 了解 C# 中的异步(套接字)

转载 作者:行者123 更新时间:2023-12-02 22:23:39 25 4
gpt4 key购买 nike

我对异步方法实现的目标有点困惑。我在查找如何使服务器接受多个连接时遇到它。在查看 Aync 在 C# 中究竟做了什么时,让我感到困惑的是,从我可以看出它不是它自己的线程。但是,它也可以让您避免锁定和停顿。例如,如果我有以下内容:

    ConnectionManager()
{
listener = new TcpListener(port);
listener.BeginAcceptSocket(new AsyncCallback(acceptConnection), listener);
}

public void acceptConnection(IAsyncResult ar)
{
//Do stuff
}

这是否意味着一旦找到连接,它就会执行“acceptConnection”函数,然后继续通过调用函数执行? (在这种情况下超出范围)。这如何让我创建一个能够接受多个客户端的服务器应用程序?尽管我之前曾使用线程来管理服务器/客户端交互,但我对这个概念还很陌生。如果我有点含糊,请告诉我。我在 MSDN 上查找了多个示例,但仍然有点困惑。提前谢谢你!

最佳答案

as soon as it finds a connection, it executes the "acceptConnection" function

then continues to execute through the caller function?

没有。

what does the Async approach achieve

如果做得好,它可以使用更少的资源每秒处理更多的请求。

假设您正在创建一个服务器,它应该接受 10 个 TCP 端口上的连接。

使用阻塞 API,您必须创建 10 个线程来接收套接字。线程是昂贵的系统资源,例如每个线程都有自己的堆栈,线程之间的切换需要相当长的时间。如果客户端连接到某个套接字,操作系统将不得不唤醒相应的线程。

使用异步 API,您发布 10 个异步请求。当客户端连接时,您的 acceptConnection 方法将由 CLR 线程池中的线程调用。

还有一件事。

如果你想在等待异步 I/O 操作完成后继续执行调用函数,你应该考虑新的 C# 的 async/await 语法,它允许你这样做。该功能作为 visual studio 2010 的独立库“Async CTP”提供,并包含在 visual studio 2012 中。

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

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