异步TCP编程
- 异步操作一般在单独的线程中执行
- 异步设计模式:基于事件的异步设计模式、基于IASyncResult的异步设计模式;
1,基于IASyncResult的设计模式:
基本原理:
通过前缀为Begin和End的两个方法实现开始和结束异步操作。异步操作完成后,会返回一个实现IASyncResult接口的对象,该对象存储了有关异步操作的信息,包括:
- AsyncState:包含异步操作需要的状态信息,如不需要可设置为null;
- AsyncWaitHandle
- CompleteSynchronously:
- IsComplete:指示异步操作是否已经完成。
AsyncCallback委托:
AsyncCallback委托实现了保证异步操作完成时能够及时通知调用者这一机制。
2,异步方式调用同步方法:
用异步方式调用同步方法需要声明一个与要调用的方法具有相同签名的委托:
- 关键代码:
private BinaryWriter bw;
private delegate void SendMessageDelegate(string sendMessage);
private SendMessageDelegate sendMessageDelegeate;
sendMessageDelegate=new SendMessageDelegate(AsyncSndMsg);
private void AsyncSndMsg(string sendMessage)
{
try
{
...
bw.Write(sendMessage);
bw.Flush();//清空缓存
...
}
catch
{
...
}
}
最后通过轮询方式检查异步调用是否完成:
private Bool needExit;
IAsyncResult result=sendMessageDelegate.BeginInvoke(sendMessage,null,null);
While(result.Iscomplete==true)
{
if(needExit)
{
break;
}
Thread.Sleep(30);
}
20150311