使用SocketAsyncEventArgs进行异步发送。有一个字节队列,来缓存要发送的数据。开启了一个新的线程,不断将字节队列里面的数据使用SocketAsyncEventArgs,以异步的方法发送出去。现在的问题是:如何在异步发送后阻止发送线程,以等待异步发送完的回调方法。_Socket.SendAsync(_SendAsyncArgs);//执行完这个方法后,需要阻止一下,等待这个方法的执行:
private void _SendAsyncArgs_Completed(object sender, SocketAsyncEventArgs e){}//这个方法执行完毕后,使发送线程继续发送。我不知道用什么停比较好呀,
还有,字节队列在发送的时候想全部取出来,这个时候要加个锁,防止其他字节进队,这个锁用什么比较好呢?
我贴了一张流程图图,网址是这个:
http://i810.photobucket.com/albums/zz23/gezhonglunta/49a43eaa.jpg
private void _SendAsyncArgs_Completed(object sender, SocketAsyncEventArgs e){}//这个方法执行完毕后,使发送线程继续发送。我不知道用什么停比较好呀,
还有,字节队列在发送的时候想全部取出来,这个时候要加个锁,防止其他字节进队,这个锁用什么比较好呢?
我贴了一张流程图图,网址是这个:
http://i810.photobucket.com/albums/zz23/gezhonglunta/49a43eaa.jpg
object objLock = new object();//锁
byte[] _bdate;//要发送的数据
void Send()//发送
{
byte[] bdata;
lock (objLock)
{
//如果发送全部成功
if (_Socket.SendAsync(_SendAsyncArgs))
{
//清理掉缓存区
_SendAsyncArgs.Clear();
}
}
}
void Add()//添加缓存
{
lock(objLock)
{
//将数据加到缓存
}
}