Socket.AcceptAsync是否需要和'结束'方法调用

时间:2011-08-30 10:06:35

标签: c# sockets

阅读Socket.AcceptAsync的MSDN文档我还不完全清楚是否有免费的“结束”方法。

因此,在BeginAccept()的情况下,有一个EndAccept()方法完成调用并将IAsyncResult作为参数,允许开发人员访问Socket(通过IAsyncResult.AsyncState方法)。在内部调用EndAccept(或任何其他Endxxx方法对)可以清除一些CLR分配的资源,并提供监视异步操作是否实际完成/错误等的功能。

所有这些都让我想到在调用AcceptAsync之后是否需要调用End方法 - 或者就此而言是ReceiveAsync?或者他们的End方法是否整齐地包含在Async中,可能是作为Task和ContinueWith?因此,为什么SocketAsyncEventArgs包含Socket本身。

如果有人知道那么辉煌!非常感谢!

1 个答案:

答案 0 :(得分:1)

没有。没有End方法。

您应该处理Completed中的SocketAsyncEventArgs事件。另请注意,ReceiveAsync等可以直接完成(因此不会触发事件)。

<强>更新

  

因此,为什么SocketAsyncEventArgs包含Socket本身。

这是因为您应该能够为同一个类中的所有客户端处理IO操作。您还有一个UserToken属性,可用于存储客户特定信息。

  

或者他们的End方法整齐地包含在Async中,可能是作为Task和ContinueWith

没有。新的Async模型更像是由Windows提供的“真实”模型(IO完成端口)。引入了Begin / End类型的结构,使异步编程更容易。创建XxxxAsync模型是为了那些需要它的应用程序获得更好的性能(imho有一些可以从中受益,但它对那些非常重要)