是否存在基于TPL(异步/等待)的套接字抽象?

led*_*neb 1 .net c#

我需要编写一个TCP客户端来与服务器通信.看看代码示例(Socket,TcpClient?),考虑到我在C#冒险中看到过的其他内容,我似乎无法找到任何感觉像是"现代"方法的方法.

我想我特别希望看到任务和代码await socket.Connect(args),但我看到基于回调的异步或BeginX方法......

我有什么选择,在这里?我是否只是继续使用并使用没有TPL的东西,还是有其他方法?

非常感谢!

Ste*_*ary 5

没有基于TAP的原始套接字API,没有.我相信BCL团队看了一下这个Socket - 它已经支持完整的同步API和两个完整的异步API - 并且决定添加第三个完整的异步API就太多了.

这是很容易使用Task.Factory.FromAsync来包装现有Begin/ End方法.就个人而言,我喜欢使用扩展方法来实现这一点,因此可以更自然地调用它们.

但首先你应该退后一步,看看有没有办法避免使用原始套接字.特别是,看看SignalR是否可能.编写正确的原始套接字代码非常困难,使用更高级别的抽象会更容易.

  • @ledneb:在这种情况下,我有一个[TCP/IP FAQ](http://blog.stephencleary.com/2009/04/tcpip-net-sockets-faq.html)可以帮助你.祝好运! (2认同)