使用 .NET 异步编程,在程序继续执行的同时对 .NET 类方法进行调用,直到进行指定的回调为止;或者如果没有提供回调,则直到对调用的阻塞、轮询或等待完成为止。例如,一个程序可以调用一个方法,该方法枚举一个较大的列表,同时主程序将继续执行。在完成枚举后,进行回调并且程序对它进行寻址。
异步编程是由 .NET 框架的许多区域支持的功能,这些区域包括:
- 文件 IO、流 IO、套接字 IO
{
fs.BeginWrite( .
fs.BeginRead( .
}
using ( Socket s = new Socket(si) )
{
s.BeginAccept();
s.BeginReceive();
s.BeginSend();
s.BeginConnect();
}
- 网络:HTTP、TCP 远程处理信道(HTTP、TCP)和代理
{
request.BeginGetResponse();
}
- 使用 ASP.NET 创建的 XML Web services
在WebService里面生命的方法XXX,VS.net都会在在客户端代理类中自动生成与之对应的三个方法:XXX/BeginXXX/EndXXX,我们调用BeginXXX即可完成异步操作。
当然,如果你愿意,你也可以在服务器端实现异步调用
服务器端异步方法介绍
值得一提的是,在ASP.Net2.0里面,WebService的异步模式已经变成了事件模式了,也就是 请求>>等待结束事件。对于WEB方法XX,Vs.Net 2005会生成XXAsync方法和XXCompleted事件,这在本质上同BeginXX,EndXX模式没有太大的区别,但是对于客户端程序编写者来说,编写异步操作代码变得更简单了---不需要同IAsync接口打交道了。请点此了解。
- ASP.NET Web 窗体
目前,ASP.Net中可以通过 AJAX 和 Atals (微软的AJAX实现)来实现异步WEB操作。
- MSMQ 上的对消息处理消息队列
利用 MSMQ(Microsoft Message Queue),应用程序开发人员可以通过发送和接收消息方便地与应用程序进行快速可靠的通信。消息处理为您提供了有保障的消息传递和执行许多业务处理的可靠的防故障方法。
MSMQ与XML Web Services和.Net Remoting一样,是一种分布式开发技术。但是在使用XML Web Services或.Net Remoting组件时,Client端需要和Server端实时交换信息,Server需要保持联机。MSMQ则可以在Server离线的情况下工作,将Message临时保存在Client端的消息队列中,以后联机时再发送到Server端处理。
显然,MSMQ不适合于Client需要Server端及时响应的这种情况,MSMQ以异步的方式和Server端交互,不
用担心等待Server端的长时间处理过程。
例子
- 异步委托
委托具有Invoke,BeginInvoke,EndInvoke方法。实例化一个委托以后,可以调用委托的 BeginInvoke 方法完成异步操作。
这是一个相当有用而且简单的方法,在执行自定义的操作的时候,使用异步委托是最优雅的方式---完全不需要自己管理线程资源。异步委托可以说是DotNet异步变成模式的核心,DotNet的很多内建的异步编程模式基本上都是通过异步委托来实现的。
关于异步委托可以参考MSDN文档
总结一下,异步调用的本质是利用新的线程完成工作,而免除对当前线程(一般是界面线程或主线程)的阻塞。借助于对ISynchronizeInvoke接口的实现,.net 对异步操作提供了完美的支持,正如其对反射提供的完美支持一样。