取消Socket.xxxxAsync调用

spe*_*der 12 .net c# sockets

在调用Socket.Shutdown,Socket.Close和Socket.Disconnect之后,看来Socket.ReceiveAsync不会中止.尝试重用ReceiveAsync调用中使用的SocketAsycEventArgs对象(在文档中作为最佳实践建议)会导致错误:

使用此SocketAsyncEventArgs实例已在进行异步套接字操作

我需要做些什么才能让ReceiveAsync释放它对这个SocketAsyncEventArgs实例的控制?

编辑:我已经解决了这个问题,标记了一个待处理的接收,并且在接收到之前没有进行任何清理(即已完成调度).虽然感觉不太好.它不能像WebRequest API一样被中止吗?

Mat*_*vis 7

似乎没有办法中止异步接收.

当套接字关闭时,这会强制接收完成,并且回调方法的SocketAsyncEventArgs参数的SocketError属性的值将为SocketError.OperationAborted.遇到此情况时,可以将SocketAsyncEventArgs对象返回到可重用池.

这在此处显示的示例中进行演示.具体来说,请查看ProcessReceive()方法,该方法在e.BytesTransferred == 0或时调用CloseClientSocket()方法e.SocketError != SocketError.Success.CloseClientSocket()方法是将SocketAsyncEventArgs对象返回到池的位置.