当前位置:  开发笔记 > 编程语言 > 正文

取消Socket.xxxxAsync调用

如何解决《取消Socket.xxxxAsync调用》经验,为你挑选了1个好方法。

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

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

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

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



1> Matt Davis..:

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

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

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有