C# 使用异步方式网络编程的问题 ~~~~送分贴
大家好,今天碰到一个网络编程的问题,
功能描述如下:
现有网络接收线程A,主要工作是用while循环不断发送数据给服务器,并同时从服务器接收数据,为了不阻塞该线程,我发送和接收都使用的是异步socket方式。主线程退出时候将完成socket清理操作.异步回调函数则是将socket对象传入后,分别做发送和接收数据操作
现有问题:
在线程A结束时候后,回调函数会引发异常,主要提示是socket对象被释放,我分析原因在于主线程结束后,socket操作清理完成,但是此时回调线程没有停止,导致使用到了已经释放的socket对象,此时我该如何操作才能保证我A线程进行socket清理操作时候,发送和接收的异步回调都已经完成?
[解决办法]
异步回调时,可以先关闭线程,再关闭socket,这样就不会出现socket关闭后,再在background线程中被调用的情况,我之前碰到该问题,就是这么解决的
[解决办法]
用锁把它锁在外面,判断变量是否可用即可
virtual void Close(SocketAsyncEventArgs e)
{
lock (this)
{
if (e.AcceptSocket != null)
{
e.AcceptSocket.Shutdown(SocketShutdown.Both);
e.AcceptSocket.Close();
e.AcceptSocket.Dispose();
e.AcceptSocket = null;
}
}
}