在套接字中使用异步等待

本文关键字:异步 等待 套接字 | 更新日期: 2023-09-27 18:37:09

在Stefen Toub的代码Awaiting Socket Operations中:它没有提到其异步方法的用法。我的意思是服务器程序将如何使用 await 调用异步方法?Ther 也不是任何 main()。请详细说明这一点。我尝试创建一个main()并调用SocketExtensions.ReceiveAsync(sock,awaitable);

public static void Main(string[] str)
{
    Console.WriteLine("'n'n<<<<<<<<<<<  Server is starting...  >>>>>>>>>>>>>>>>>");
    IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 10100);
    Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    var args = new SocketAsyncEventArgs();
    args.SetBuffer(new byte[0x100000], 0, 0x100000);
    var awaitable = new SocketAwaitable(args);
    while(true)
        SocketExtensions.ReceiveAsync(sock,awaitable);
}

但这对我不起作用。

在套接字中使用异步等待

Stephen Toub的博客文章不是套接字教程;它展示了如何使用自定义awaitables来支持极高性能的套接字应用程序。

我建议您从 WebAPI 或 WCF 之类的内容开始,并且仅在必要时使用裸套接字。如果你确实需要使用套接字,那么我建议你先用TaskFactory.FromAsync来包装Begin/End方法;这效率略低,但编程模型更容易。如果性能测试表明此时您的服务器不够快,则应使用 Stephen Toub 博客文章中的自定义等待者方法。

您的服务器不工作的原因是您没有倾听或接受。我建议你改用 WebAPI 或 WCF。