在套接字中使用异步等待
本文关键字:异步 等待 套接字 | 更新日期: 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。