BeginConnect和ConnectAsync有什么区别?

BeginConnectConnectAsync什么区别? 随后, BeginDisconnectDisconnectAsync什么区别?

ConnectAsync文档指出:

“开始远程主机连接的异步请求。”

BeginConnect文档指出:

“开始远程主机连接的异步请求。”

DisconnectAsyncBeginDisconnect表示同样的事情:

“开始异步请求以断开与远程端点的连接。”

这些方法对与应该使用哪种方法之间的区别是什么?

Socket.ConnectAsync提供SocketAsyncEventArgs作为参数,与BeginConnect提供的3个参数相比,它包含更多信息。 另外我知道ConnectAsync比BeginConnect晚推出并解决了与超时相关的一些问题(现在不记得这个讨论的来源)。 在可能的情况下首选ConnectAsync(尽管它需要min .NET 2.0 SP1)。

关于回调的ConnectAsync有一个问题。 如果这是值得关注的话,以下是关于它的讨论: 使用System.Net.Sockets.Socket.AcceptAsync模型和AsyncCallBack CompletedSynchronously 时堆栈溢出

Silverlight中不支持BeginConnect方法(仅支持ConnectAsync),因此如果您打算开发客户端Silverlight应用程序,这可能是另一个问题。

两种方法中使用的模式也不同。 以下是讨论: .NET中套接字的Begin *和* Async之间是否存在性能差异?

引入了XXXXAsync方法,因为它们可以减少服务器具有多个连接客户端时发生的内存抖动。 与文档中描述的池相结合,与旧的BeginXXX API相比,使用此API大大减少了GC必须执行的工作量。

文档说如下 :

这些增强function的主要特征是避免在高容量异步套接字I / O期间重复分配和同步对象。 当前由System.Net.Sockets.Socket类实现的Begin / End设计模式要求为每个异步套接字操作分配System.IAsyncResult对象。

因此,除非您为数千个连接的客户端编写服务器,否则我不会打扰XXXXAsync。 API实现起来相当困难,除了企业级服务之外几乎没什么好处。